当前位置:首页 > Java

java中如何实现多线程

2026-02-04 12:31:26Java

实现多线程的三种核心方法

继承Thread类
通过继承Thread类并重写run()方法定义线程任务。创建子类实例后调用start()方法启动线程。

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

实现Runnable接口
实现Runnable接口的run()方法,将实例作为参数传递给Thread构造函数。这种方式更灵活,推荐使用。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread running via Runnable");
    }
}
// 启动线程
new Thread(new MyRunnable()).start();

使用Callable和Future
适用于需要返回结果或抛出异常的线程任务。通过ExecutorService提交Callable任务,返回Future对象获取结果。

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> "Callable result");
System.out.println(future.get()); // 获取结果
executor.shutdown();

线程池管理

固定大小线程池
通过Executors.newFixedThreadPool(int)创建固定数量的线程池,避免频繁创建销毁线程的开销。

ExecutorService pool = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
    pool.execute(() -> System.out.println(Thread.currentThread().getName()));
}
pool.shutdown();

线程同步与安全

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

synchronized void criticalSection() {
    // 线程安全代码
}

ReentrantLock显式锁
提供更灵活的锁控制,支持公平锁和中断等待。

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

线程间通信

wait()与notify()
通过Object类的wait()notify()实现线程等待与唤醒。需在synchronized块中使用。

synchronized (lock) {
    lock.wait(); // 释放锁并等待
    lock.notify(); // 唤醒等待线程
}

现代并发工具

CompletableFuture异步编程
Java 8引入的异步编程工具,支持链式调用和组合异步任务。

CompletableFuture.supplyAsync(() -> "Hello")
    .thenApply(s -> s + " World")
    .thenAccept(System.out::println);

并行流处理
利用parallelStream()实现集合数据的并行处理。

List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.parallelStream().forEach(n -> System.out.println(n * n));

每种方法适用于不同场景:简单任务可用ThreadRunnable;需返回值时用Callable;高并发场景优先选择线程池和并发工具类。同步机制确保数据一致性,而现代API如CompletableFuture简化了复杂异步逻辑的实现。

java中如何实现多线程

分享给朋友:

相关文章

vue多线程实现run

vue多线程实现run

Vue 多线程实现 Worker 在 Vue 中实现多线程通常通过 Web Worker 完成。Web Worker 允许在后台线程中运行脚本,避免阻塞主线程。 创建 Worker 文件 新建一个…

js多线程如何简单实现

js多线程如何简单实现

JavaScript 多线程的简单实现方法 JavaScript 本身是单线程的,但可以通过 Web Workers 实现多线程操作。Web Workers 允许在后台运行脚本,独立于主线程执行任务。…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { ite…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty(…