温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java多线程怎么实现并发

发布时间:2026-10-24 01:56:03 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,多线程并发通常指“多个任务同时执行(或交替执行)以提高效率”。下面从实现方式 → 控制并发 → 常见工具三个层次讲清楚。


一、Java 中实现多线程的方式

1️⃣ 继承 Thread

class MyThread extends Thread {
    public void run() {
        System.out.println("线程执行");
    }
}

MyThread t = new MyThread();
t.start();

✅ 简单
❌ 不能继承其他类(Java 单继承)


2️⃣ 实现 Runnable(推荐)

class MyTask implements Runnable {
    public void run() {
        System.out.println("任务执行");
    }
}

Thread t = new Thread(new MyTask());
t.start();

✅ 更灵活
✅ 适合线程池


3️⃣ 实现 Callable(有返回值)

Callable<Integer> task = () -> {
    return 1 + 1;
};

FutureTask<Integer> ft = new FutureTask<>(task);
new Thread(ft).start();

System.out.println(ft.get());

✅ 能返回结果
✅ 能抛异常


4️⃣ 使用线程池(生产环境推荐)

ExecutorService pool = Executors.newFixedThreadPool(4);

pool.execute(() -> {
    System.out.println("并发任务");
});

pool.shutdown();

✅ 复用线程
✅ 控制并发数量
✅ 避免频繁创建线程


二、并发带来的问题 & 解决方案

❗ 问题:线程不安全

int count = 0;
// 多线程 count++

结果可能不正确。


✅ 解决方案 1:synchronized

synchronized (this) {
    count++;
}

或方法锁:

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

✅ 解决方案 2:ReentrantLock

Lock lock = new ReentrantLock();
lock.lock();
try {
    count++;
} finally {
    lock.unlock();
}

✅ 更灵活(可中断、超时)


✅ 解决方案 3:原子类(无锁)

AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();

✅ 高性能
✅ 推荐计数场景


三、线程间协作(并发控制)

1️⃣ wait / notify

synchronized (obj) {
    obj.wait();
    obj.notify();
}

2️⃣ CountDownLatch

CountDownLatch latch = new CountDownLatch(3);
latch.countDown();
latch.await(); // 等待完成

3️⃣ CyclicBarrier

多个线程互相等待

4️⃣ Semaphore

控制同时访问线程数


四、并发编程推荐实践

✅ 使用线程池
✅ 优先使用 java.util.concurrent
✅ 避免 synchronized 大范围锁
✅ 使用不可变对象
✅ 善用 volatile、Atomic


五、一句话总结

Java 并发 = 多线程执行 + 线程安全控制 + 合理调度

如果你愿意,可以告诉我:

  • 你是 初学 / 面试 / 项目实战?
  • 想了解 线程池 / 锁 / 并发集合 / 实战案例?

我可以给你更针对性的例子。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手