synchronized鎖物件
阿新 • • 發佈:2022-04-01
1:定義執行緒,oneThread
public class OneThread implements Runnable { @Override public void run() { synchronized (this){ for (int i =0;i< 100;i++){ System.out.println(Thread.currentThread().getName()+"開始的程式設計號碼為"+i); if (i == 10){ Thread.yield(); } } } } }
2:開始呼叫執行緒
public class TestThread { public static void main(String[] args) { Thread oneThread = new Thread(new OneThread(),"執行緒ONE"); Thread twoThread = new Thread(new OneThread(),"執行緒TWO"); oneThread.start(); twoThread.start(); } }
如此使用,synchronized鎖會失效,因為new的是兩個物件,synchronized獲取的是兩把不同的鎖,所以會導致併發失效
3:修改synchronized是併發訪問有效
public class OneThread implements Runnable { @Override public void run() { synchronized (OneThread.class){ for (int i =0;i< 100;i++){ System.out.println(Thread.currentThread().getName()+"開始的程式設計號碼為"+i); if (i == 10){ Thread.yield(); } } } } }