我有一个名为"Channel"的类,定义了两个方法:
class Channel {
void read(){...}
void write(){...}
}
Run Code Online (Sandbox Code Playgroud)
在多线程环境中使用了这个类的实例.多个线程定期从通道读取,而一个线程周期性地写入它.读操作是线程安全的,因此可以同时进行多次读操作.但是,一旦写入操作开始,必须阻止读取线程,直到写入操作完成.必须尽可能快地保持读取操作并避免消耗资源的同步例程.
实施此类行为的最合适模式是什么?也许java类或库有帮助吗?
使用ReadWriteLock.它将允许串行写入发生并发读取.为了进一步满足您的要求,收购a writeLock将阻止任何readLock人在后续发布之前取得进展.
class Channel {
final ReadWriteLock lock = new ReentrantReadWriteLock();
void read(){
lock.readLock().lock();
try{
}finally{
lock.readLock().unlock();
}
}
void write(){
lock.writeLock().lock();
try{
}finally{
lock.writeLock().unlock();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |