關於Java的執行緒同步問題的總結

2021-08-22 06:33:28 字數 1280 閱讀 8727

[b]第一種情況,synchronized無效[/b]

[code]package com.test;

public class threadtest extends thread

public static void main(string args) throws exception

}public synchronized void run()

}}[/code]

[b]第二種情況,synchronized有效[/b]

[code]package com.test;

public class threadtest2 extends thread

public static void main(string args) throws exception

}public void run() }}

}[/code]

[b]第三種情況,synchronized有效[/b]

[code]package com.test;

public class threadtest3 extends thread

public static void main(string args) throws exception

}public static synchronized void abc(int threadno)

}public void run()

}[/code]

[b]總結:[/b]

1、對於同步的方法或者**塊來說,必須獲得物件鎖才能夠進入同步方法或者**塊進行操作;

2、如果採用method級別的同步,則物件鎖即為method所在的物件(怎麼這麼彆扭),如果是靜態方法,物件鎖即指method所在的class物件(唯一);

3、對於**塊則,物件鎖即指synchronized(abc)中的abc;

4、因為第一種情況,物件鎖即為每乙個執行緒物件,因此有多個,所以同步失效,第二種共用同乙個物件鎖lock,因此同步生效,第三個因為是static因此物件鎖為threadtest3的class 物件,因此同步生效。

如上述正確,則同步有兩種方式,[b]**塊和方法[/b]

如果是**塊,則物件鎖自己指定,一般有些**為synchronized(this)只有在單態模式才生效;

如果是方法,[b]則分靜態和非靜態兩種[/b]。

靜態方法則一定會同步,非靜態方法需在單例模式才生效,推薦用靜態方法(不用擔心是否單例)。

[color=red]不知道以上說的對否,如不對請指點。[/color]

[url]

java 執行緒的同步

執行緒的同步,也可以理解執行緒鎖,可以同步乙個方法,在方法名前加synchronized關鍵字。如 public synchronized viod run 但是這樣做是把整個方法同步,某個執行緒進入這個方法,可能會一直呼叫,這樣其他執行緒就進不來,如此一來,就相當於只有乙個執行緒在跑。也可以同步 ...

Java執行緒同步問題synchronized

android usb 讀寫以前都是一讀一寫,但有些機器會出問題。就採用讀寫非同步的方法。使用物件鎖,object自帶的,然後使用object的方法wait和notify notifyall 使用方法簡單,記錄下 public synchronized int lra setregister int...

Java學習 執行緒同步問題

多個執行緒買票 安全 public class unsafebuyticket implements runnable synchronized 鎖 執行緒安全實現機制 佇列 鎖 private synchronized void buyticket try catch interruptedexc...