多執行緒相關

2021-07-15 07:21:14 字數 2749 閱讀 8045

多執行緒示例**:

public class threadtest 

}}).start ();

new thread (new runnable ()

}}).start ();new thread (new runnable ()

}}).start ();

}}class print

public void print2 ()

public void print3 ()

}

上面的**建立了3個執行緒執行print類的3個方法 結果如:

1.宣告方法為同步的:

public synchronized   void print1 ()
2,新增同步**塊:

public  void print2 ()

}

選擇上面2種方法之一把print()3個方法進行處理就不會出現亂序了,乙個執行緒執行的時候不會突然跳到其他執行緒 從而出現亂序字元

如果想乙個執行緒執行一次方法列印一句又換另外的方法輸出另外一句呢?

就需要實現執行緒間的通訊:

什麼時候需要通訊

* 多個執行緒併發執行時, 在預設情況下cpu是隨機切換執行緒的

* 如果我們希望他們有規律的執行, 就可以使用通訊, 例如每個執行緒執行一次列印

1.利用object類的wait()和notify()方法:

怎麼通訊

* 如果希望執行緒等待, 就呼叫wait()

* 如果希望喚醒等待的執行緒, 就呼叫notify();

* 這兩個方法必須在同步**中執行, 並且使用同步鎖物件來呼叫

多個執行緒通訊的問題

* notify()方法是隨機喚醒乙個執行緒

* notifyall()方法是喚醒所有執行緒

* jdk5之前無法喚醒指定的乙個執行緒

* 如果多個執行緒之間通訊, 需要使用notifyall()通知所有執行緒, 用while來反覆判斷條件

class print 

system.out.print ("驚");

system.out.print("虹");

system.out.print ("留");

system.out.println ("恨");

n=2;

this.notifyall ();//修改標記變數喚醒其他在等待的所有執行緒}}

public void print2 () throws interruptedexception

system.out.print ("素");

system.out.print("還");

system.out.println("真");

n = 3;

this.notifyall ();}}

public void print3 () throws interruptedexception

system.out.print ("佛");

system.out.print("劍");

system.out.print ("分");

system.out.println ("說");

n =1;

this.notifyall ();}}

}

執行效果:

2.jdk1.5之後可是使用reentrantlock 和condition:

class print 

system.out.print ("驚");

system.out.print ("虹");

system.out.print ("留");

system.out.println ("恨");

n = 2;

c2.signal ();//點名喚醒c2條件

r.unlock ();//解鎖

}public void print2 () throws interruptedexception

system.out.print ("素");

system.out.print ("還");

system.out.println ("真");

n = 3;

c3.signal ();

r.unlock ();

}public void print3 () throws interruptedexception

system.out.print ("佛");

system.out.print ("劍");

system.out.print ("分");

system.out.println ("說");

n = 1;

c1.signal ();

r.unlock ();}}

與synchronized相比,不同的執行緒使用不同的condition, 這樣就能區分喚醒哪個執行緒了.功能更強大.

如果目標不是執行方法而是可以裝入容器例項的話(比如生存者和消費者的栗子),還可以使用更方便的arrayblockingqueue阻塞佇列還實現,更加的方便

多執行緒相關

1.synchronized同步方法 方法內的變數為執行緒安全的 執行緒中的例項變數非執行緒安全,易出現髒讀,方法上加synchronized關鍵字 多個執行緒訪問同乙個物件的同步方法時,執行緒安全 synchronized取得的鎖都是物件鎖,而不是把一段 或者方法當作鎖 多個執行緒訪問多個物件的同...

多執行緒相關

方法1 public class threadcreat 方法2 新建乙個類繼承thread類,thread類本身實現了runnable介面,可以通過繼承重寫thread類的run方法 實現runnable介面而來 來寫執行緒的執行體,然後例項化這個新建的類來新建乙個執行緒 1.同步阻塞 想要獲得鎖...

多執行緒 執行緒池相關

銀行有四個視窗辦業務,好比四個cpu。如果只開乙個執行緒的話,相當於所有辦業務的人都排成一隊在乙個視窗辦業務,或者說每個人都必須等上乙個人辦完業務之後隨機選乙個視窗,總之就是序列乙個個來。所以這體現了多執行緒優點的就是可以充分利用現在計算機配置多核cpu的硬體特性,把多核cpu利用起來提高任務的處理...