家装设计网站大全,wordpress奖励插件,wordpress 文章推荐插件,php网站开发实例教程码源JUC#xff08;Java.util.concurrent#xff09;是Java 5中引入的一个并发编程库#xff0c;它包含了许多用于多线程处理的工具类和接口。JUC主要提供了以下特性#xff1a; 线程池#xff1a;线程池可以提高线程的使用效率#xff0c;避免频繁地创建和销毁线程#xff… JUCJava.util.concurrent是Java 5中引入的一个并发编程库它包含了许多用于多线程处理的工具类和接口。JUC主要提供了以下特性 线程池线程池可以提高线程的使用效率避免频繁地创建和销毁线程从而使得应用程序的性能得到提升。 并发集合类JUC提供了一些线程安全的集合类如ConcurrentHashMap、CopyOnWriteArrayList等可以在多线程环境下安全地操作集合。 原子操作类JUC提供了一些原子操作类如AtomicInteger、AtomicLong等可以在多线程环境下安全地操作共享变量。 同步器JUC提供了一些同步器如Semaphore、CountDownLatch、CyclicBarrier等可以协调多个线程之间的执行。 并发工具类JUC还提供了一些并发工具类如Lock、Condition等可以代替传统的synchronized关键字提供更灵活、更高效的线程同步机制。 CountDownLatch和CyclicBarrier都是Java中用于多线程编程的工具类属于同步器的一种。它们都可以用于控制多个线程的执行顺序。 代码示例
CountDownLatch
介绍 CountDownLatch是一个计数器通过它可以控制线程执行的先后顺序。它的作用是让某个线程等待若干个其他线程执行完后再执行。使用CountDownLatch时需要指定一个计数器的值当所有计数器都为0时等待线程才会继续执行。 代码
public class TestCountDown {private static CountDownLatch clnew CountDownLatch(4);public static void main(String[] args) {Thread thread1 new Thread(() - {try {System.out.println(start1);Thread.sleep(4000);cl.countDown();System.out.println(end1);} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread2 new Thread(() - {try {System.out.println(start2);Thread.sleep(4000);cl.countDown();System.out.println(end2);} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread3 new Thread(() - {try {System.out.println(start3);Thread.sleep(4000);cl.countDown();System.out.println(end3);} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread4 new Thread(() - {try {System.out.println(start4);Thread.sleep(4000);cl.countDown();System.out.println(end4);} catch (InterruptedException e) {throw new RuntimeException(e);}});thread1.start();thread2.start();thread3.start();thread4.start();try {cl.await();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(ok);}
}
运行结果 CyclicBarrier 介绍 CyclicBarrier也可以用于控制线程的顺序执行。它可以协调一组线程在某个屏障处等待并互相等待直到所有线程都到达该屏障后再一起继续执行。CyclicBarrier可以重复使用每次调用await()方法时计数器的值都会减1当计数器为0时所有线程都会被释放。 代码
public class TestCyclicBarrier {// 自定义工作线程private static class Worker extends Thread {private CyclicBarrier cyclicBarrier;public Worker(CyclicBarrier cyclicBarrier) {this.cyclicBarrier cyclicBarrier;}Overridepublic void run() {super.run();try {System.out.println(Thread.currentThread().getName() 开始等待其他线程);cyclicBarrier.await();System.out.println(Thread.currentThread().getName() 开始执行);// 工作线程开始处理这里用Thread.sleep()来模拟业务处理Thread.sleep(1000);System.out.println(Thread.currentThread().getName() 执行完毕);} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {int threadCount 3;CyclicBarrier cyclicBarrier new CyclicBarrier(threadCount);for (int i 0; i threadCount; i) {System.out.println(创建工作线程 i);Worker worker new Worker(cyclicBarrier);worker.start();}}
}
运行结果 总结 总结来说CountDownLatch是控制一个线程等待多个其他线程执行完毕后再执行而CyclicBarrier是控制多个线程相互等待直到所有线程都到达某个屏障后再一起继续执行。