600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java多线程 信号量和屏障实现控制并发线程数量 主线程等待所有线程执行完毕2

Java多线程 信号量和屏障实现控制并发线程数量 主线程等待所有线程执行完毕2

时间:2023-04-27 13:28:55

相关推荐

Java多线程 信号量和屏障实现控制并发线程数量 主线程等待所有线程执行完毕2

项目需求需要多线程执行计算任务,主线程要等所有线程执行完毕,记录执行结果。另外要控制并行线程数量,防止用光内存。实现测试代码如下。

测试代码如下:

public class ThreadsTest {public static ExecutorService exec;public static void main(String[] args) throws WriteException, IOException {// 线程池exec = Executors.newCachedThreadPool();// 只能2个线程同时访问final Semaphore semp = new Semaphore(2);// 模拟10个客户端访问for (int i=0;i<10;i++) {Runnable run = new Runnable() {@Overridepublic void run() {try {// 获取许可semp.acquire();for(int j=0; j<6;j++){Thread.sleep(100);System.out.println("--------j----threadName-----" + j + "====" + Thread.currentThread().getName());}// 访问完后,释放semp.release();//availablePermits()指的是当前信号灯库中有多少个可以被使用System.out.println("-----------------" + semp.availablePermits());} catch (InterruptedException e) {e.printStackTrace();}}};exec.execute(run);}exec.shutdown();System.out.println("------------都结束了?????????------------");while(true){try{Thread.sleep(100);if(exec.isTerminated()){System.out.println("都结束了!");break;}}catch(Exception e){e.printStackTrace();}}}}

实际输出如下;

------------都结束了?????????------------

--------j----threadName-----0====pool-1-thread-1

--------j----threadName-----0====pool-1-thread-2

--------j----threadName-----1====pool-1-thread-1

--------j----threadName-----1====pool-1-thread-2

--------j----threadName-----2====pool-1-thread-1

--------j----threadName-----2====pool-1-thread-2

--------j----threadName-----3====pool-1-thread-1

--------j----threadName-----3====pool-1-thread-2

--------j----threadName-----4====pool-1-thread-2

--------j----threadName-----4====pool-1-thread-1

--------j----threadName-----5====pool-1-thread-1

--------j----threadName-----5====pool-1-thread-2

-----------------2

-----------------2

--------j----threadName-----0====pool-1-thread-5

--------j----threadName-----0====pool-1-thread-3

--------j----threadName-----1====pool-1-thread-5

--------j----threadName-----1====pool-1-thread-3

--------j----threadName-----2====pool-1-thread-5

--------j----threadName-----2====pool-1-thread-3

--------j----threadName-----3====pool-1-thread-3

--------j----threadName-----3====pool-1-thread-5

--------j----threadName-----4====pool-1-thread-3

--------j----threadName-----4====pool-1-thread-5

--------j----threadName-----5====pool-1-thread-5

--------j----threadName-----5====pool-1-thread-3

-----------------1

-----------------1

--------j----threadName-----0====pool-1-thread-4

--------j----threadName-----0====pool-1-thread-6

--------j----threadName-----1====pool-1-thread-4

--------j----threadName-----1====pool-1-thread-6

--------j----threadName-----2====pool-1-thread-4

--------j----threadName-----2====pool-1-thread-6

--------j----threadName-----3====pool-1-thread-6

--------j----threadName-----3====pool-1-thread-4

--------j----threadName-----4====pool-1-thread-4

--------j----threadName-----4====pool-1-thread-6

--------j----threadName-----5====pool-1-thread-6

-----------------1

--------j----threadName-----5====pool-1-thread-4

-----------------1

--------j----threadName-----0====pool-1-thread-7

--------j----threadName-----0====pool-1-thread-8

--------j----threadName-----1====pool-1-thread-7

--------j----threadName-----1====pool-1-thread-8

--------j----threadName-----2====pool-1-thread-7

--------j----threadName-----2====pool-1-thread-8

--------j----threadName-----3====pool-1-thread-8

--------j----threadName-----3====pool-1-thread-7

--------j----threadName-----4====pool-1-thread-8

--------j----threadName-----4====pool-1-thread-7

--------j----threadName-----5====pool-1-thread-8

--------j----threadName-----5====pool-1-thread-7

-----------------1

-----------------1

--------j----threadName-----0====pool-1-thread-10

--------j----threadName-----0====pool-1-thread-9

--------j----threadName-----1====pool-1-thread-9

--------j----threadName-----1====pool-1-thread-10

--------j----threadName-----2====pool-1-thread-10

--------j----threadName-----2====pool-1-thread-9

--------j----threadName-----3====pool-1-thread-9

--------j----threadName-----3====pool-1-thread-10

--------j----threadName-----4====pool-1-thread-9

--------j----threadName-----4====pool-1-thread-10

--------j----threadName-----5====pool-1-thread-9

-----------------1

--------j----threadName-----5====pool-1-thread-10

-----------------2

都结束了!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。