首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-06-18 
我这样写的线程同步代码行不行?两个函数,一个是读,一个是写。要求写保持同步,在写操作进行时,不可以进行读

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

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

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

热点排行