[英]Mix volatile and synchronized as a read-write lock
考慮一個原始類型變量,其中包含許多線程讀取和幾個線程寫入,以下代碼是否可以正常工作?
如果它會,它提供比1)更好的性能。 聲明所有方法的同步; 2)。 使用顯式ReadWriteLock?
這是一種常見的模式嗎? 如果沒有,在這種情況下通常使用什么模式?
這對我來說當前工作正常,但我覺得使用volatile和synchronized有點多余。
private volatile int value = 1;
public void func1()
{
if (value == 1) {
// do something
}
}
public void func2()
{
if (value == 2) {
// do something
}
}
public void func3()
{
if (value == 3) {
// do something
}
}
public synchronized void increase()
{
if (value < 10) value++;
}
public synchronized void decrease()
{
if (value > 0) value--;
}
是的,這是常見的,至少在一定程度上:)
您正在使用的模式在此IBM文章中進行了描述 - > http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html
(模式#5,便宜的讀寫鎖技巧)
考慮一個原始類型變量,其中包含許多線程讀取和幾個線程寫入,以下代碼是否可以正常工作?
我認同。
如果它會,它提供比1)更好的性能。 聲明所有方法的同步; 2)。 使用顯式ReadWriteLock?
我認為是這樣,只要讀取操作超過寫入請求。 然而:
這是一種常見的模式嗎? 如果沒有,在這種情況下通常使用什么模式?
我不知道這是否常見。 但我的直覺是,最常見的方法是只使用常規同步,而不用擔心它。 除非您正在處理高度競爭的數據結構,否則各種方法之間的性能差異對於整體應用程序性能來說無關緊要。
我確信它提供了更好的性能,因為沒有鎖定,但它是否正確取決於代碼的意圖。 當然,行為與同步的情況不同。 行為是否類似於鎖定案例取決於您鎖定的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.