Java多线程同步器代码详解
概述
Java中的多线程同步器是保证多线程程序执行正确性的重要机制。本文将详细讲解Java中的多线程同步器,并提供相关示例。
同步器的类型
Java中的同步器大致可以分为以下两种类型:
- CountDownLatch
CountDownLatch是一个同步辅助工具,用于在执行一组操作之前一个或多个线程等待一组事件发生。它通过一个计数器初始化,该计数器由需要等待的线程递减,当计数器为0时,所有等待的线程被释放。
一个示例:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) {
CountDownLatch latch = new CountDownLatch(2);
new Thread(() -> {
try {
System.out.println("Thread 1 waiting...");
Thread.sleep(3000);
System.out.println("Thread 1 done!");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
System.out.println("Thread 2 waiting...");
Thread.sleep(5000);
System.out.println("Thread 2 done!");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
try {
latch.await();
System.out.println("All threads finished!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
上述代码中,两个线程同时启动,分别等待3秒和5秒后执行完毕,最后主线程等待两个线程执行完毕后再执行。
- CyclicBarrier
CyclicBarrier也是一个同步辅助工具,它允许一组线程等待彼此达到一个共同的障碍点。它通过一个计数器初始化,每个线程执行await方法后计数器递减,当计数器为0时,所有线程开始执行。
一个示例:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierDemo {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3, () -> {
System.out.println("All threads finished!");
});
new Thread(() -> {
try {
System.out.println("Thread 1 running...");
Thread.sleep(2000);
System.out.println("Thread 1 done!");
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
System.out.println("Thread 2 running...");
Thread.sleep(3000);
System.out.println("Thread 2 done!");
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
System.out.println("Thread 3 running...");
Thread.sleep(4000);
System.out.println("Thread 3 done!");
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}
上述代码中,三个线程同时启动,分别等待2秒、3秒和4秒后执行完毕,最后主线程打印“All threads finished!”。
总结
Java中的多线程同步器提供了一种保证多线程程序执行正确性的机制。本文主要讲解了CountDownLatch和CyclicBarrier两种同步器,希望对读者能有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程同步器代码详解 - Python技术站