JAVA 執行緒同步 synchronized
阿新 • • 發佈:2018-12-20
synchronized public void methidA(){ for(int i = 0; i< 100;i++){ System.out.println("methidA"); try{ Thread.sleep(5); }catch(Exception e){ } } } public void methidB(){ synchronized(this){ for(int i = 0; i< 100;i++){ System.out.println("methidB"); try{ Thread.sleep(5); }catch(Exception e){ } } } } 僅僅是 相同效果的 兩種不同寫法
public class MyObject{ /*synchronized*/ public static void methidA(){ for(int i = 0; i< 100;i++){ System.out.println("methidA"); try{ Thread.sleep(5); }catch(Exception e){ } } } /*synchronized*/ public static void methidB(){ for(int i = 0; i< 100;i++){ System.out.println("methidB"); try{ Thread.sleep(5); }catch(Exception e){ } } } public static void main(String []args){ System.out.println("test Start!"); new Thread(new Runnable(){ public void run(){ methidA(); } }).start(); new Thread(new Runnable(){ public void run(){ methidB(); } }).start(); } }
結果為亂序。
若將 註釋去除 , 先列印A後B
public class MyObject{ /*synchronized*/ public void methidA(){ for(int i = 0; i< 100;i++){ System.out.println("methidA"); try{ Thread.sleep(5); }catch(Exception e){ } } } /*synchronized*/ public void methidB(){ for(int i = 0; i< 100;i++){ System.out.println("methidB"); try{ Thread.sleep(5); }catch(Exception e){ } } } public static void main(String []args){ System.out.println("test Start!"); MyObject obj = new MyObject(); new Thread(new Runnable(){ public void run(){ obj.methidA(); } }).start(); new Thread(new Runnable(){ public void run(){ obj.methidB(); } }).start(); } }
此處程式碼與上片程式碼執行相同