Semaphore与Exchanger使用场景
请说明Semaphore(信号量)和Exchanger(交换器)的工作原理、使用场景及代码示例。
回答
屠龙少年
Semaphore(信号量):
- 原理:维护一组许可证(permits),acquire()获取许可证,release()归还。基于AQS共享模式。
- 场景:限流(控制同时访问某资源的线程数)、连接池管理。
- 示例:
Semaphore sem = new Semaphore(3); sem.acquire(); // 使用资源; sem.release();
Exchanger(交换器):
- 原理:两个线程在同步点交换数据,双方都到达exchange()方法时才交换。
- 场景:两个线程之间的数据交换、遗传算法中的配对交换、校对工作(两个线程各自处理的数据进行比对)。
- 示例:
Exchanger<String> exchanger = new Exchanger<>(); String result = exchanger.exchange(data); - 特点:可设置超时时间,支持泛型。如果只有一个线程调用exchange()会被阻塞。
注意:Exchanger只能用于两个线程间的配对交换,且需确保双方同时到达交换点。