当前位置:首页 > 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()实现集合数据的并行处理。

java中如何实现多线程

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

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

分享给朋友:

相关文章

vue实现多线程

vue实现多线程

Vue 中实现多线程的方法 Vue.js 本身是单线程的,但可以通过 Web Workers 或类似技术实现多线程操作。以下是几种常见的方法: 使用 Web Workers Web Workers…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…

java如何实现跨平台

java如何实现跨平台

Java实现跨平台的原理 Java通过“一次编写,到处运行”的设计理念实现跨平台能力。其核心机制包括: Java虚拟机(JVM) Java源代码编译为字节码(.class文件),由JVM解释执行。不…

vue如何实现滚动

vue如何实现滚动

Vue 实现滚动的方法 使用原生滚动 在Vue中可以直接使用HTML原生滚动,通过CSS设置overflow: auto或overflow: scroll来实现滚动效果。适用于简单场景。 <d…

vue如何实现confirm

vue如何实现confirm

Vue 实现 Confirm 弹窗的方法 在 Vue 中实现确认弹窗(Confirm)可以通过多种方式,以下是几种常见的方法: 使用浏览器原生 confirm 最简单的实现方式是直接调用浏览器的原生…

vue登录如何实现

vue登录如何实现

Vue 登录功能实现 前端部分(Vue.js) 1. 创建登录表单组件 <template> <div> <form @submit.prevent="ha…