读书人

小弟我这样写的线程同步代码行不行

发布时间: 2012-06-18 13:23:36 作者: rapoo

我这样写的线程同步代码行不行?
两个函数,一个是读,一个是写。要求写保持同步,在写操作进行时,不可以进行读操作。我的解决方法是:

import java.util.concurrent.locks.ReentrantLock;

final ReentrantLock lock = new ReentrantLock();

void write()
{
try{
lock.lock();
...write code
}
finally{
lock.unlock();
}
}


void read()//我的思想是:如果其它线程写操作正在进行中,则这里读取被阻塞。否则随即释放锁,因为读和读之间无需同步。
{
try{
lock.lock();
}
finally{
lock.unlock();
}

...read code//专门放后面
}

小弟初学,请都大虾这种写法行不行?



[解决办法]
有个玩意儿叫 java.util.concurrent.locks.ReadWriteLock
专门处理这种情况的

new 一个java.util.concurrent.locks.ReentrantReadWriteLock (上面ReadWriteLock的实现类)
然后分别得到 readLock()和writeLock();

读操作时,使用readLock()返回的锁,
写操作时,使用writeLock()返回的锁

可以保证:写操作和写操作,写操作和读操作,是同步的。 读操作和读操作,是并发的

读书人网 >软件开发

热点推荐