2010-09-21 86 views
-1

什麼是java中的線程同步? 詳細給出了它的任何例子什麼是java中的線程同步?

+1

在谷歌搜索,你會發現很多的很好的例子。 – 2010-09-21 20:44:17

+2

這看起來像作業。請自行找出基本知識,然後在此處詢問一些更具體的問題。 – tangens 2010-09-21 20:45:45

+0

我通常不會詳細回答作業問題。但從這裏複製/粘貼的答案與從任何其他網站複製/粘貼的答案一樣好。這不是好像在這裏有一個編程問題。 – 2010-09-21 21:44:30

回答

3

看看java tutorial關於同步。

+0

也請閱讀Doug Lea在實踐中的併發性。 – 2010-09-22 06:18:00

1

在多線程程序中,經常有部分程序需要以原子方式運行(就像它是單個操作一樣)。這些通常被稱爲關鍵區域,並使用互斥(互斥)範例進行保護。 Java中的​​關鍵字就是提供互斥的一種方式。

考慮代碼:

synchronized(lockObject) { 
    //critical code 
} 

在上面的代碼中,只有一個線程可在一個時間進行,只要由變量lockObject對象引用從未改變輸入同步塊。這可以確保在同步塊內執行的代碼只能由單個線程執行。

需要鎖定的常見示例是在迭代集合時。很少Java Collection實現提供線程安全迭代。創建線程安全迭代的基本方法是通過該集合上的同步塊來保護對集合的每次訪問。

例如:

synchronized(myCollection) { 
    myCollection.add(item); 
} 

synchronized(myCollection) { 
    myCollection.remove(item); 
} 

synchronized(myCollection) { 
    for(Object item:myCollection){ 
    System.out.println(item); 
    } 
}