多線程共享資源案例

最近研究了一下多線程,主要針對於多線程共享同一資源,和多線程執行各自的資源
其實主要要就是搞清楚資源的含義:你要操作什麼,什麼就是線程的資源!
1.先說一下多線程執行各自的資源:
執行各自的資源從字面意思就可以看出來線程執行的資源互不干涉,各自執行各自的。
案例如下:

package TestThread;
public class TicketsThread {
     public static void main(String[] args) {
         Tickets tickets1 = new Tickets();  
         tickets1.start();
         Tickets tickets2 = new Tickets();  
         tickets2.start();        
}
}
class Tickets extends Thread{
    private int num=10;
    @Override
    public void run() {
       while(num>0){
           sale();
       }

    }
        synchronized void sale() {  
            if(num > 0){    
                System.out.println(Thread.currentThread().getName() + "賣出一張票,還剩餘"+ (--num) + "張票。");  
                try{    
                    Thread.sleep(100);    
                }catch(InterruptedException e){    
                    e.printStackTrace();    
                }    
            }    
        }    
}

控制檯輸出:
這裏寫圖片描述
次案例我開了兩個線程,操作各自的資源!
這是我開啓的兩個線程:

   Tickets tickets1 = new Tickets();  
         tickets1.start();
         Tickets tickets2 = new Tickets();  
         tickets2.start();        

從控制太打印結果可以看出來,各自操作各自的10張票,互不干涉,
這段代碼是打印線程名稱:

Thread.currentThread().getName()

2.說一下多線程共享同一資源:
共享同一資源源從字面意思就可以看出來兩個以上線程執行同一資源。
案例如下:

package TestThread;
public class TicketsThread {
     public static void main(String[] args) {
         Tickets tickets = new Tickets();    
         new Thread(tickets).start();  
         new Thread(tickets).start();  

}
}
class Tickets extends Thread{
    private int num=10;
    @Override
    public void run() {
       while(num>0){
           sale();
       }

    }
        synchronized void sale() {  
            if(num > 0){    
                System.out.println(Thread.currentThread().getName() + "賣出一張票,還剩餘"+ (--num) + "張票。");  
                try{    
                    Thread.sleep(100);    
                }catch(InterruptedException e){    
                    e.printStackTrace();    
                }    
            }    
        }    
}

控制檯打印結果:
這裏寫圖片描述
此案例我開了兩個線程操作以同一資源類似於火車站兩個窗口同時賣票系統,
兩個線程操作共同的10張票,按照順序依次遞減,
以下是操作同一資源的代碼:

 Tickets tickets = new Tickets();    
         new Thread(tickets).start();  
         new Thread(tickets).start(); 

這樣就很輕鬆的理解了多線程操作同一資源,和各自資源!!!!!

發佈了32 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章