多線程

 1 package com.xixi;  2 
 3 class Test{  4     public static void main(String[] args){  5         Thread t1 = new Thread(){  6             public void run(){  7                 for(int i =0;i<10;i++) {  8                     System.out.println(getName()+"aaaa");  9  } 10  } 11  }; 12 
13         Thread t2=new Thread(){ 14             public void run(){ 15                 for(int i =0;i<10;i++) { 16                     if (i==2){ 17                         try { 18  t1.join(); 19                         }catch (Exception e){ 20  e.printStackTrace(); 21  } 22  } 23                     System.out.println(getName()+"bbbb"); 24  } 25  } 26  }; 27 
28  t1.start(); 29  t2.start(); 30  } 31 }

 

13.同步代碼塊spa

實例:線程

 1 package com.xixi;  2 
 3 class Test{  4     public static void main(String[] args){  5         Printer p=new Printer();  6         new Thread(){  7             public void run(){  8  p.print1();  9  } 10  }.start(); 11         new Thread(){ 12             public void run(){ 13  p.print2(); 14  } 15  }.start(); 16  } 17 } 18 
19 class Printer{ 20     Object d=new Object(); 21     public void print1(){ 22         synchronized (d) { 23             System.out.println("A"); 24             System.out.println("B"); 25             System.out.println("C"); 26  } 27  } 28 
29     public void print2(){ 30         synchronized (d) { 31             System.out.println("a"); 32             System.out.println("b"); 33             System.out.println("c"); 34  } 35  } 36 }

 

14.同步方法code

 

 15.用同步代碼塊的方法解決實際問題對象

如下模擬火車站四個窗口共售賣100張票blog

 1 package com.xixi;  2 
 3 class Test{  4     public static void main(String[] args){  5         new Seller().start();  6         new Seller().start();  7         new Seller().start();  8         new Seller().start();  9  } 10 } 11 
12 class Seller extends Thread{ 13    private static int ticket=100;   //將票數設置爲靜態變量,這樣保證了四個線程訪問數據的同一性。
14    public void run(){ 15        while (true){ 16            //這裏給代碼塊上鎖,保證同步執行
17            synchronized (Seller.class) {  //這裏上的鎖爲保證統一,用的是Seller類的對象。
18                if (Seller.ticket == 0) 19                    break; 20                //模擬實際的各種延遲
21                try { 22                    Thread.sleep(10); 23                } catch (Exception e) { 24  e.printStackTrace(); 25  } 26                
27                System.out.println("這是" + getName() + "號窗口:第" + (ticket--) + "號票已賣出。"); 28  } 29  } 30  } 31 }
相關文章
相關標籤/搜索