关于java的线程同步,比较常见的是使用synchronized关键字,同时辅助Object对象的wait() notify()方法实现。
DK 5.0为开发人员开发高性能的并发应用程序提供了一些很有效的新选择。例如, java.util.concurrent.lock
中的类 ReentrantLock
被作为 Java 语言中 synchronized
功能的替代,它具有相同的内存语义、相同的锁定,但在争用条件下却有更好的性能,此外,它还有 synchronized
没有提供的其他特性。
syschronized 的典型应用
synchronized (lockObject) {
// update object state
}
用ReentrantLock 保护代码块
Lock lock = new ReentrantLock();
lock.lock();
try {
// update object state
}
finally {
lock.unlock();
}
多个线程间的协调工作
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
synchronized(obj) {
condition = true;
obj.notify();
}
利用Condition对象实现线程通信Condition addCondition = lock.newCondition();
if(...) addCondition.await(); //阻塞
.... addCondition.signal(); // 唤醒
参看文章 http://www.ibm.com/developerworks/cn/java/j-jtp10264/
http://blog.csdn.net/flyandrun/archive/2008/11/25/3369623.aspx