嗨,伙计,我班上有一个全球日期,这个日期被两个线程使用和修改,我需要解决这个日期的互斥问题。我不是 java 专家,用 c 语言很简单,例如:
lock(...)
use/modified global date
unlock(....)
我需要java中的通讯员
嗨,伙计,我班上有一个全球日期,这个日期被两个线程使用和修改,我需要解决这个日期的互斥问题。我不是 java 专家,用 c 语言很简单,例如:
lock(...)
use/modified global date
unlock(....)
我需要java中的通讯员
对于初学者,请使用synchronized
块:
Object dateLock = new Object(); // globally visible lock, declare it
// next to your date object
//...
synchronized(dateLock) {
// modify date
}
以上对于两个线程来说已经足够了。对于更复杂的场景,例如经常由多个线程完成读取并且很少写入时,请查看ReadWriteLock。
您可以使用两种方法:
1)使用同步关键字:
synchronized(theGlobalDate) {
// do whatever modification you want
}
这是Java世界的基础。
2) 在 Java 5 中,有一组新的并发库,你可以使用锁来做一些类似于你在 C 中所做的事情
private final ReentrantLock lock = new ReentrantLock();
.....
public void foo() {
lock.lock();
try {
// do whatever modification you want
} finally {
lock.unlock();
}
}