当前位置:首页 > Java

java线程如何应用

2026-03-21 05:05:40Java

创建线程的两种方式

Java中创建线程主要有两种方式:继承Thread类或实现Runnable接口。

继承Thread类
通过继承Thread类并重写run()方法实现线程逻辑。

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread running by extending Thread class");
    }
}
// 启动线程
MyThread thread = new MyThread();
thread.start();

实现Runnable接口
更推荐的方式是实现Runnable接口,避免单继承限制。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread running by implementing Runnable");
    }
}
// 通过Thread类启动
Thread thread = new Thread(new MyRunnable());
thread.start();

线程池的使用

通过线程池管理线程资源,提高性能。Java提供ExecutorService框架实现线程池。

固定大小线程池

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
    System.out.println("Task executed by thread pool");
});
executor.shutdown(); // 关闭线程池

定时任务线程池

java线程如何应用

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
    System.out.println("Periodic task running");
}, 0, 1, TimeUnit.SECONDS); // 延迟0秒,每隔1秒执行

线程同步与锁

多线程共享资源时需同步以避免竞态条件。

synchronized关键字
修饰方法或代码块,确保同一时间只有一个线程访问。

class Counter {
    private int count = 0;
    public synchronized void increment() {
        count++;
    }
}

ReentrantLock
更灵活的锁机制,需手动释放锁。

ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
    // 临界区代码
} finally {
    lock.unlock();
}

线程间通信

通过wait()notify()notifyAll()实现线程协作。

java线程如何应用

生产者-消费者示例

class SharedBuffer {
    private Queue<Integer> queue = new LinkedList<>();
    private int capacity = 2;

    public synchronized void produce(int item) throws InterruptedException {
        while (queue.size() == capacity) {
            wait(); // 缓冲区满时等待
        }
        queue.add(item);
        notifyAll(); // 唤醒消费者线程
    }

    public synchronized int consume() throws InterruptedException {
        while (queue.isEmpty()) {
            wait(); // 缓冲区空时等待
        }
        int item = queue.poll();
        notifyAll(); // 唤醒生产者线程
        return item;
    }
}

线程状态与生命周期

Java线程有以下状态:

  • NEW:新建未启动
  • RUNNABLE:可运行或正在运行
  • BLOCKED:等待监视器锁
  • WAITING:无限期等待
  • TIMED_WAITING:有限期等待
  • TERMINATED:终止

通过Thread.getState()获取线程状态。

线程中断机制

通过interrupt()请求中断线程,需配合isInterrupted()检查。

Thread thread = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        System.out.println("Running...");
    }
});
thread.start();
thread.interrupt(); // 发送中断信号

注意事项

  • 避免直接调用Thread.run(),应使用start()启动线程。
  • 线程池需显式关闭,防止资源泄漏。
  • 同步代码块应尽量缩小范围,减少性能影响。
  • 谨慎使用Thread.stop(),推荐通过中断机制安全终止线程。

标签: 线程java
分享给朋友:

相关文章

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…

php实现线程

php实现线程

在PHP中实现多线程功能需要借助扩展或第三方库,因为PHP本身是单线程设计的语言。以下是几种常见的方法: 使用pthreads扩展(PHP 7以下版本) pthreads是一个PHP扩展,允许在PH…

java实现php

java实现php

Java 实现 PHP 功能的方法 在 Java 中实现 PHP 的功能通常涉及以下几个方面:字符串处理、Web 开发、数据库操作等。以下是几种常见需求的实现方法。 字符串处理 PHP 中的字符串处…

php线程实现

php线程实现

在PHP中实现多线程可以通过多种方式,以下是常见的方法和示例: 使用pthreads扩展 pthreads是PHP的一个多线程扩展,适用于PHP 7.2及以上版本(Windows需ZTS版本)。…

js线程实现

js线程实现

JavaScript 线程实现方法 JavaScript 是单线程语言,但可以通过以下方式模拟多线程或实现并行处理: Web Workers Web Workers 允许在后台线程中运行脚本,不会影…