java多執行緒同步方式
阿新 • • 發佈:2018-12-28
1 同步程式碼塊 自定義鎖
class Thread33 implements Runnable{ int a = 100; Object obj = new Object(); @Override public void run() { while(a > 0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj) { if(a > 0){ Thread thread = Thread.currentThread(); System.out.println(thread.getName() +" "+ a); a--; } } } } } public class Thread3 { public static void main(String[] args) { Thread33 thread3 = new Thread33(); Thread thread1 = new Thread(thread3); thread1.start(); Thread thread2 = new Thread(thread3); thread2.start(); Thread thread4 = new Thread(thread3); thread4.start(); } }
2 同步函式 同步函式使用this鎖
class Thread44 implements Runnable{ int a = 100; Object obj = new Object(); @Override public void run() { while(a > 0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } this.jian(a); } } public synchronized void jian(int a){ if(a > 0){ a--; } } } public class Thread4 { public static void main(String[] args) { Thread33 thread3 = new Thread33(); Thread thread1 = new Thread(thread3); thread1.start(); Thread thread2 = new Thread(thread3); thread2.start(); Thread thread4 = new Thread(thread3); thread4.start(); } }
3 靜態同步函式 方法上加上static關鍵字 使用synchronized 關鍵字修飾 或者使用類.class檔案