Java中的信号量Semaphore
信号量机制可以用来保证线程互斥
创建Semaphore对象: 传入一个整形参数,类似于公共资源
常用方法:
- acquire();获取一个公共资源,公共资源-1,如果公共资源小于等于0阻塞等待
- acquire(int permits);获取permits个公共资源,公共资源-permits,如果公共资源<0阻塞等待
- release();释放一个公共资源,公共资源+1
- release(int permits);释放permits个公共资源,公共资源+permits
- boolean tryAcquire( );尝试获取一个公共资源,可以获取返回true,不可以返回false
- boolean tryAcquire( int permits );尝试获取permits个公共资源,可以获取返回true,不可以返回false
Semaphore s = new Semaphore(1); s.acquire(); s.release();
示例:
import java.util.concurrent.Semaphore; public class SemaphoreTest { public static void main(String[] args) throws InterruptedException { Semaphore t = new Semaphore(1); new Thread( ()->{ try { t.acquire( ); // 获取 Thread.sleep(2000); 编程客栈 System.out.println(Thread.currentThread().getName()+" 执行!"); } catch (InterruptedException e) { e.printStackTrace(); }finally { t.release(); //释放 } } ,"thread1" ).start(); new Thread( ()->{ try { t.acquihttp://www.devze.comre(); Thread.sleep(2000); System.out.println(Thread.currentThread().getName()+"python 执行!"); } catch (Exception e) { e.printStackTrace();php }finally { t.release(1); } } ,"thread2" ).start(); } }
到此这篇关于Java中的信号量Semaphore详细解读的文章就介绍到这了,更多相关信号量Semaphorpythone内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论