這個Java類是線程安全的嗎?是長線程安全嗎?
class Counter() {
private Long counter = 0;
Long get() { return counter; }
Long inc() { return ++counter; }
}
如果沒有,是否有可能使線程安全的,而無需使用鎖明確(或關鍵字)?如果不是,那麼我猜以下是實現我的目標的最簡單方法嗎?
class Counter() {
private final AtomicLong counter = new AtomicLong(0);
Long get() { return counter.get(); }
Long inc() { return counter.incrementAndGet(); }
}
你的第一個例子,除了不可編譯之外,不會做你認爲它的工作。 – Perception 2013-03-18 13:46:52
我假設你的意思是'++ counter',它不應該因爲'final'而被編譯。對? – Gray 2013-03-18 13:47:35
如果您刪除語法錯誤並將變量名從'long'更改爲'counter',它確實不會因爲'final'而編譯,是的。 – Perception 2013-03-18 13:48:49