1. 程式人生 > >【利用鎖的三種方法來實現在多個執行緒時只執行一個執行緒】

【利用鎖的三種方法來實現在多個執行緒時只執行一個執行緒】

  1. package test.thread;  
  2. public class TestSync {  
  3.     public static void main(String[] args) {  
  4.         Object object = new Object();  
  5.         for (int i = 0; i < 5; i++) {  
  6.             new Sync2(i, object).start();  
  7.         }  
  8.     }  
  9. }  
  10. //第一種方法:利用鎖住方法來做(其實就是為了保證方法的唯一性就可以了),,利用了static來實現
  11. class Sync3 extends Thread {  
  12.     //傳入執行緒編號
  13.     public Sync3(int num) {  
  14.         // TODO Auto-generated constructor stub
  15.     }  
  16.     @Override  
  17.     public void run() {  
  18.     print(getName());  
  19.     }  
  20.     //【關鍵】執行一個鎖住的方法,然後將其放在run方法裡面執行,保證了鎖住執行緒
  21.     public synchronized static void print(String name)  
  22.     {  
  23.         for (int i = 0; i < 1000; i++) {  
  24.             System.out.println("編號為"+name+"列印"+i);  
  25.         }  
  26.     }  
  27. }  
  28. //第二種方法:利用鎖住物件來做,其實就是為了鎖住同一個物件就可以了需要在主類中新建一個物件,來保證每次呼叫時物件都是唯一的
  29. class Sync2 extends Thread {  
  30.     // 不管new多少個最終只有一個物件,
  31.     // static Object object = new Object();
  32.     private Object object = new Object();  
  33.     public Sync2(int num, Object object) {  
  34.         super(String.valueOf(num));  
  35.         this.object = object;  
  36.     }  
  37.     public void run() {  
  38.         synchronized (object) {  
  39.             for (int i = 0; i < 1000; i++) {  
  40.                 System.out.println("執行緒為" + getName() + " " + i);  
  41.             }  
  42.         }  
  43.     }  
  44. }  
  45. //第三種方法:利用鎖住物件來做,其實就是為了鎖住同一個物件就可以了,,利用了static來實現
  46. class Sync extends Thread {  
  47.     // 不管new多少個最終只有一個物件,
  48.     static Object object = new Object();  
  49.     public Sync(int num) {  
  50.         super(String.valueOf(num));  
  51.     }  
  52.     public void run() {  
  53.         synchronized (object) {  
  54.             for (int i = 0; i < 1000; i++) {  
  55.                 System.out.println("執行緒為" + getName() + " " + i);  
  56.             }  
  57.         }  
  58.     }  
  59. }