当前位置:首页 > Java

java线程如何使用

2026-02-04 21:15:42Java

创建线程的两种主要方式

在Java中,线程可以通过继承Thread类或实现Runnable接口来创建。继承Thread类需要重写run方法,实现Runnable接口则需要实现run方法。Runnable方式更灵活,推荐使用。

// 继承Thread类
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread running");
    }
}

// 实现Runnable接口
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Runnable running");
    }
}

启动线程

创建线程实例后,调用start方法启动线程。注意直接调用run方法不会创建新线程,而是在当前线程中执行。

// 继承方式启动
MyThread thread1 = new MyThread();
thread1.start();

// 实现Runnable方式启动
Thread thread2 = new Thread(new MyRunnable());
thread2.start();

线程状态管理

线程有新建、可运行、阻塞、等待、计时等待和终止等状态。可以使用isAlive方法检查线程是否存活,join方法等待线程结束。

Thread thread = new Thread(() -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});
thread.start();

// 等待线程结束
thread.join();
System.out.println("Thread finished");

线程同步

当多个线程访问共享资源时,需要使用同步机制。synchronized关键字可以修饰方法或代码块,保证同一时间只有一个线程执行。

java线程如何使用

class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

线程池的使用

使用线程池可以避免频繁创建销毁线程的开销。Java提供了Executor框架来管理线程池。

ExecutorService executor = Executors.newFixedThreadPool(4);

for (int i = 0; i < 10; i++) {
    executor.execute(() -> {
        System.out.println("Task executed by " + Thread.currentThread().getName());
    });
}

executor.shutdown();

线程间通信

wait、notify和notifyAll方法可以实现线程间通信。这些方法必须在同步块或同步方法中调用。

class SharedResource {
    private boolean ready = false;

    public synchronized void waitForReady() throws InterruptedException {
        while (!ready) {
            wait();
        }
    }

    public synchronized void setReady() {
        ready = true;
        notifyAll();
    }
}

线程中断处理

线程可以通过interrupt方法请求中断,被中断线程需要检查中断状态并做出响应。

java线程如何使用

Thread thread = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
});
thread.start();

// 请求中断
thread.interrupt();

线程局部变量

ThreadLocal类可以为每个线程创建变量的副本,避免共享变量带来的同步问题。

ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);

Thread thread1 = new Thread(() -> {
    threadLocal.set(1);
    System.out.println(threadLocal.get());  // 输出1
});

Thread thread2 = new Thread(() -> {
    System.out.println(threadLocal.get());  // 输出0
});

原子操作

java.util.concurrent.atomic包提供了原子变量类,如AtomicInteger,可以保证操作的原子性。

AtomicInteger atomicInt = new AtomicInteger(0);

atomicInt.incrementAndGet();
System.out.println(atomicInt.get());  // 输出1

并发集合

Java提供了线程安全的集合类,如ConcurrentHashMap,可以在多线程环境下安全使用。

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key", 1);
System.out.println(map.get("key"));  // 输出1

分享给朋友:

相关文章

java如何使用

java如何使用

Java 基本使用方法 Java 是一种广泛使用的编程语言,适用于开发各种类型的应用程序。以下是 Java 的基本使用方法,包括环境配置、语法基础和常用操作。 安装 Java 开发环境 下载并安装…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

如何使用 react native

如何使用 react native

安装开发环境 确保已安装 Node.js(建议使用 LTS 版本)。通过以下命令安装 React Native 命令行工具: npm install -g expo-cli 或使用 Yarn:…

react如何使用函数

react如何使用函数

使用函数组件的基本语法 在React中,函数组件是通过JavaScript函数定义的组件。函数接收props作为参数,并返回React元素。 function Welcome(props) {…

react如何使用ueditor

react如何使用ueditor

安装 UEditor 下载 UEditor 的官方版本,解压后将整个文件夹放入项目的 public 目录下。确保可以通过 URL 直接访问 UEditor 的资源文件,例如 public/uedito…

react router如何使用

react router如何使用

React Router 的基本使用 安装 React Router 库,使用 npm 或 yarn 进行安装: npm install react-router-dom 配置路由 在应用的入口文件…