当前位置:首页 > 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中实现动态主题切换,通常需要结合CSS变量和状态管理。通过修改根元素的CSS变量值,可以全局改变应用的主题样式。 定义主题相关的CSS变量在根元素中: :root {…

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model实…

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

react如何实现插槽

react如何实现插槽

React 实现插槽的方法 React 本身没有直接提供类似 Vue 的插槽(slot)概念,但可以通过以下几种方式实现类似功能: 使用 props.children React 组件可以通过 pr…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…