在 Java 中,多线程并发通常指“多个任务同时执行(或交替执行)以提高效率”。下面从实现方式 → 控制并发 → 常见工具三个层次讲清楚。
Threadclass MyThread extends Thread {
public void run() {
System.out.println("线程执行");
}
}
MyThread t = new MyThread();
t.start();
✅ 简单
❌ 不能继承其他类(Java 单继承)
Runnable(推荐)class MyTask implements Runnable {
public void run() {
System.out.println("任务执行");
}
}
Thread t = new Thread(new MyTask());
t.start();
✅ 更灵活
✅ 适合线程池
Callable(有返回值)Callable<Integer> task = () -> {
return 1 + 1;
};
FutureTask<Integer> ft = new FutureTask<>(task);
new Thread(ft).start();
System.out.println(ft.get());
✅ 能返回结果
✅ 能抛异常
ExecutorService pool = Executors.newFixedThreadPool(4);
pool.execute(() -> {
System.out.println("并发任务");
});
pool.shutdown();
✅ 复用线程
✅ 控制并发数量
✅ 避免频繁创建线程
int count = 0;
// 多线程 count++
结果可能不正确。
synchronizedsynchronized (this) {
count++;
}
或方法锁:
public synchronized void add() {
count++;
}
ReentrantLockLock lock = new ReentrantLock();
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
✅ 更灵活(可中断、超时)
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();
✅ 高性能
✅ 推荐计数场景
wait / notifysynchronized (obj) {
obj.wait();
obj.notify();
}
CountDownLatchCountDownLatch latch = new CountDownLatch(3);
latch.countDown();
latch.await(); // 等待完成
CyclicBarrier多个线程互相等待
Semaphore控制同时访问线程数
✅ 使用线程池
✅ 优先使用 java.util.concurrent
✅ 避免 synchronized 大范围锁
✅ 使用不可变对象
✅ 善用 volatile、Atomic
Java 并发 = 多线程执行 + 线程安全控制 + 合理调度
如果你愿意,可以告诉我:
我可以给你更针对性的例子。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。