当前位置: 代码迷 >> 多核软件开发 >> 小弟我这样写的线程同步代码行不行
  详细解决方案

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

热度:8325   发布时间:2013-02-26 00:00:00.0
我这样写的线程同步代码行不行?
两个函数,一个是读,一个是写。要求写保持同步,在写操作进行时,不可以进行读操作。我的解决方法是:

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()返回的锁

可以保证:写操作和写操作,写操作和读操作,是同步的。 读操作和读操作,是并发的
  相关解决方案