我正在學習帶有鎖的同步塊。我想知道這個鎖和程序中提供的某個第三方鎖之間的區別。同步塊上的Java線程鎖
public class NewThread extends Thread {
StringBuffer sb;
NewThread(StringBuffer sb){
this.sb=sb;
}
public void run(){
synchronized(this.sb){
for(int i=0;i<1000;i++){
System.out.print(sb);
try{
Thread.sleep(5*60);
}
catch(Exception e){}
}
char c = this.sb.charAt(0);
this.sb.setCharAt(0, ++c);
}
}
public static void main(String[] args){
StringBuffer sb=new StringBuffer("A");
NewThread nt=new NewThread(sb);
NewThread nt1=new NewThread(sb);
NewThread nt2=new NewThread(sb);
nt.start();
nt1.start();
nt2.start();
}
}
如果我打算把
public void run(){
synchronized(this){
for(int i=0;i<1000;i++){
System.out.print(sb);
try{
Thread.sleep(5*60);
}
catch(Exception e){}
}
char c = this.sb.charAt(0);
this.sb.setCharAt(0, ++c);
}
}
這裏在上面運行方法我在synchronized塊給這個......我希望他們
之間的區別我還有一個問題,如果我們在同步塊中給出鎖對象,並且我們沒有在該塊內使用該對象,那麼我們是否會觀察到與正常塊相比的任何特定事物
謝謝我的理解..但我沒有得到共享鎖或共享鎖..可以解釋一下 – satheesh 2011-04-13 05:01:41
@satheesh我不知道這是你想要的:在一個同步的多線程/進程系統中,通常只有一種資源可以存在一個鎖。它用於控制共享對象。在Linux中,鎖和共享對象是分開的。在Java中,每個對象都有自己的鎖(可以在類Object的源代碼中找到)。也許在linux中,我們可以說一個鎖被一些進程共享,因爲鎖和進程/線程之間沒有關係。但在Java中,由於每個對象都有自己的鎖,因此不需要明確地共享鎖。該鎖由對象隱式維護。隨意問。 – 2011-04-13 05:15:15
確定我明白..但是每一個你與Linux有關的事情,我有點困惑 – satheesh 2011-04-13 05:40:39