当前位置:首页 > 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(); // 关闭线程池

定时任务线程池

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()实现线程协作。

生产者-消费者示例

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()检查。

java线程如何应用

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程序的方法 安装Java开发工具包(JDK) 确保系统已安装JDK。可通过命令行输入 java -version 检查是否安装。若未安装,需从Oracle官网或OpenJDK下载并配置环境…

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

java如何输入数据

java如何输入数据

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

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

java如何运行程序

java如何运行程序

运行Java程序的步骤 安装Java开发工具包(JDK) 确保系统已安装JDK,可通过命令行输入java -version和javac -version验证。若未安装,需从Oracle官网下载并配置环…