浅谈Semaphore类
2018-11-03 08:55:54来源:博客园 阅读 ()
Semaphore类有两个重要方法
1、semaphore.acquire();
请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire
2、semaphore.release();
释放一个信号量,这时候信号量个数+1,
这个类使用的目的为:
如何控制某个方法允许并发访问线程的个数?
也就是说在线程里执行某个方法的时候,在方法里用该类对象进行控制,就能保证所有的线程中最多只有指定信号量个数个该方法在执行。
举例:
我开启了100个线程,执行一个showLog()方法,但是我只想要所有线程中,最多有五个线程在执行该方法,其他的线程就必须排队等待。
则可以使用Semaphore对象进行控制,该对象new初始化的时候有个int参数,即指定最多信号量个数。
private Semaphore semaphore; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); semaphore = new Semaphore(5); for (int i = 0; i < 1000; i++) { new Thread(new Runnable() { @Override public void run() { showLog(); } }).start(); } } private void showLog(){ try { semaphore.acquire(); Log.i("xqxinfo","线程:"+Thread.currentThread().getName()+"执行了一个acquire请求操作"); } catch (InterruptedException e) { e.printStackTrace(); } // 线程休眠1s try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } semaphore.release(); Log.i("xqxinfo","线程:"+Thread.currentThread().getName()+"执行了一个release请求操作"); }

标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:svn部署
下一篇:Java并发(三):重排序
- 头条面试居然跟我扯了半小时的Semaphore 2020-06-08
- 信号量Semaphore 2020-02-18
- 浅谈应用系统立体化监控 2020-02-14
- Java多线程信号量同步类CountDownLatch与Semaphore 2020-02-05
- 浅谈Redis五个对象类型的底层原理 2020-01-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
