java中实现线程顺序执行的几种方式

java多线程开发中有时候会有要线程按照某个特定顺序执行的需求,而实际CPU在调度线程执行的时候是随机的,这样的机制对我们开发中某些特定的需求来说却是有些不便,那么既然有需求那么必定有解决的方法,以下为常用的解决多线程顺序执行的方法。

  1. Thread.join(),使用线程的join方法的阻塞效果来达到顺序执行的效果;调用join()方法可以看到源码中阻塞主线程执行直到子线程执行完之后才会结束等待;
  2. 利用Executors线程池,原理是方法内部是一个基于FIFO的队列,也就是线程池会根据我们的添加顺序来执行多添加的任务
  3. 使用Lock/Condition的方法来达到顺序的效果;Condition一般都是与一个锁进行关联,作为多线程间协调通信的工具类,使得某些线程一起等待某个特定的条件(await()),而只有当这个条件具备时(signal()/signalAll())这些线程才会被唤醒从而重新争夺锁;
  4. 使用线程的CountDownLatch(倒计数)方法,利用它可以实现类似计数器的功能,当count为0时被阻塞的线程才会继续执行;
  5. 使用CyclicBarrier(回环栅栏)实现线程按顺序运行;CyclicBarrier(回环栅栏):通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。
  6. 使用Sephmore(信号量)实现线程按顺序运行;Sephmore(信号量):Semaphore是一个计数信号量,从概念上将,Semaphore包含一组许可证,如果有需要的话,每个acquire()方法都会阻塞,直到获取一个可用的许可证,每个release()方法都会释放持有许可证的线程,并且归还Semaphore一个可用的许可证。然而,实际上并没有真实的许可证对象供线程使用,Semaphore只是对可用的数量进行管理维护。acquire():当前线程尝试去阻塞的获取1个许可证,此过程是阻塞的,当前线程获取了1个可用的许可证,则会停止等待,继续执行。release():当前线程释放1个可用的许可证。

以上方法为自己常用以及网上大神汇总的常用顺序执行多线程的方式,未做代码demo,仅供参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小李子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值