使同一时间内最多只有1个线程可以执行accquire()和release()之间的代码,应为只有1个许可
其实还可以传入>1的许可,代表同一时间内,最多允许x个线程可以执行acquire()和release()之间的代码.
使用代码new Semaphore(2)来实例化该类同一时间内最多允许2个线程执行
创建三个线程类:
创建运行类:
大家可以看到:同一个时间只允许两个线程运行:
另外需要说明下:
对Semaphore类的构造方法传递的参数如果permits值如果大于1,该类并不能保证线程安全,应为还是有可能会出现多个线程共同访问实例变量,导致出现脏数据的情况。
网友评论