2010-01-20 12 views

回答

3

在Java 5之前只有一個:​​關鍵字。這等待並獲得了參考對象的排他鎖。當應用於某個功能時:

public synchronized void doStuff() { ... } 

正在同步的對象是this

Java 5增加了很多併發實用程序,其中之一是Lock對象。這有幾個版本,包括ReadWriteLock。這是我能想到的唯一可以指出的事情。

​​的問題在於它相當粗糙。做得很糟糕可能會導致死鎖。 Java 5 utils允許非阻塞鎖獲取,鎖獲取超時和讀/寫鎖支持。

3

你真的需要解釋你的意思是「同步水平」。你談論的區別:

public synchronized void foo() 
{ 
    ... 
} 

public void foo() 
{ 
    synchronized(lock) 
    { 
     ... 
    } 
} 

?或者也許在上面和使用java.util.concurrent.locks的鎖?

如果您可以給您聽到的更多背景,我們可能會更好地幫助您。更重要的是,你想解決什麼問題,你認爲可能需要這些信息?

+0

只是有些地方寫有一些同步的水平,我不知道這是什麼意思?而且我已經從我的老師那裏聽到了一些,他只是有一個點它,他說那些什麼各級[:-(] – Johanna 2010-01-20 06:52:25

+1

@Johanna - ?在哪裏「的地方」其實,我懷疑你是困惑和你的老師說的是完全不同的東西無論如何,你應該問的第一個人是你的老師?還是有人其他誰去講座。 – 2010-01-20 07:08:23

0

我假設OP指的是多線程中使用的對象的同步,而不是Java中的關鍵字。

這是我的理解,在閱讀Goetz後,我們瞭解了Java中不同級別的同步。

讓我們假設我們有一個對象,我們必須在132個線程中使用這個線程,這個線程持續地,純粹地隨機地使用了100年。

abstract Class ICount { 
int i; 
String iString; 
public void add(int i); 
public void sub(int i); 
public void synchronized print(){ 
    assert(i == Integer.valueOf(iString)); 
    System.out.println("i"+String.valueof(i)+" == "+iString); 
    } 
} 

現在可能會有不同的實現,無論是設計還是粗心,在不同層次上都是線程安全的。

  1. 線程安全同步實現:保證任何java代碼,不使用反射來使用這個實現來固定對象,永遠不會觸發斷言。
  2. 並行同步實現:除了保證線程安全外,此實現的作者還嘗試允許在可能的情況下同時執行,並且還避免了鎖(爭用)。
  3. 線程不安全的同步實現:開發人員至少知道他的類不是線程安全的,並且要求你不要使用這個實現,除非你只有一個線程。

如果這是一個真正的問題,大多數的實際實現落在第四類'同步',這有時是有效的,而不是足以在上述類別之一進行分類的文檔,默認屬於第四類。