Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch

Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch

ID:37915428

大小:63.50 KB

页数:10页

时间:2019-06-02

Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch_第1页
Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch_第2页
Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch_第3页
Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch_第4页
Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch_第5页
资源描述:

《Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatchSemaphoreSemaphore是一个计数信号量。信号量中维护着一个信号量许可集,线程可以通过调用acquire()来获取信号量的许可。当信号量被许可时,线程可以向下执行,否则线程等待。同时,线程也可以通过release()来释放它的信号量。Semaphore简单的可以理解为一张许可证①饭堂打饭publicclassSemaphoreActivityextendsAppCompatActivity{//线程数privatestaticfi

2、nalintTHREAD_SIZE=5;privateSemaphoresemaphore;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_semaphore);semaphore=newSemaphore(3);for(inti=0;i

3、sCanteenThreadextendsThread{@Overridepublicvoidrun(){try{//买到粮票semaphore.acquire();System.out.println(Thread.currentThread().getName()+"号买到粮票");//模拟食堂打饭中System.out.println(Thread.currentThread().getName()+"号窗口开始打饭");Thread.sleep(2000);//提交粮票semaphore.release();System.out.printl

4、n(Thread.currentThread().getName()+"号提交粮票");}catch(InterruptedExceptione){e.printStackTrace();}}}}这里模拟了学生到食堂打饭的过程:买到粮票->打饭->提交粮票。其中semaphore代表食堂只有三张粮票的买卖,也可以理解为只有三个打饭窗口。THREAD_SIZE代表有五个学生线程同时打饭。下面通过打印信息来查看执行过程Thread-636号买到粮票Thread-636号窗口开始打饭Thread-632号买到粮票Thread-632号窗口开始打饭Threa

5、d-635号买到粮票Thread-635号窗口开始打饭......隔了2秒后Thread-636号提交粮票Thread-633号买到粮票Thread-633号窗口开始打饭Thread-632号提交粮票Thread-634号买到粮票Thread-634号窗口开始打饭Thread-635号提交粮票Thread-633号提交粮票Thread-634号提交粮票可以看到学生们打饭还是井然有序的,打完就撤,留给下一位。Semaphore就是一张通行证,灵活使用它,你就能指挥线程②打印机publicclassPrinterActivityextendsAppCom

6、patActivity{//线程数privatestaticfinalintTHREAD_SIZE=5;privateSemaphoresemaphore;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_printer);semaphore=newSemaphore(1);for(inti=0;i

7、Thread().start();}}privateclassPrinterThreadextendsThread{@Overridepublicvoidrun(){try{semaphore.acquire();System.out.println(Thread.currentThread().getName()+"进入打印");Thread.sleep(1000);System.out.println(Thread.currentThread().getName()+"打印中...");System.out.println(Thread.curr

8、entThread().getName()+"退出打印");semaphore.release();}cat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。