多執行緒問題

2021-08-09 20:48:39 字數 1610 閱讀 2901

程式:是由多個程序組成的。可以理解為靜態的**。

程序:可以理解為執行中的程式。

執行緒:是組成程序的單元,乙個程序中有多個執行緒。我們經常把執行緒看做是程序中的某乙個任務。

方式一:繼承乙個thread類

方式二:實現乙個runnable介面

兩種方式相比較,哪個能好點那?

一般建議是實現runnable介面的這個方法:原因如下:1.解決了單繼承的侷限性,2.如果有共享資料的話,還是使用實現這個介面更合適點,因為我們實現多執行緒的話只需建立乙個物件即可,假如要用繼承的方式,我們就必須的建立多個物件才能夠實現多執行緒。

多執行緒中常用的方法?

threa類中的方法:getname();  setname(string name); getcurrentthread();  start();  run();  sleep();  yield() ; 此時的執行緒將該物件停止,然後和別的物件重新一起搶占cup的執行權。

join();   將該物件先停止,加入另乙個物件。將其執行完之後該物件在開始執行 。 isalive();是否存活

getpriority()  獲取優先順序   setpriority(int i );設定優先順序 

object:中的三個執行緒通訊之間的方法:wait()  notify(); notifyall();

建立-------->就緒---------->執行-------------------->死亡

當執行緒之前存在著共享資料的時候,才會出現執行緒安全的問題,反之無共享資料,就不用考慮執行緒的安全問題。

解決的方式:要求乙個執行緒操作共享資料的時候,只有當其完全操作完成的時候,其他執行緒還有機會來操作共享資料

方式一:同步**塊:synchronized(監視器) 

注:1.監視器:俗稱鎖,就是任何乙個類的物件都可以充當鎖。

2.實現runnable介面建立多執行緒的話,可以用this來代替這個鎖,如果是用繼承的方式來建立多執行緒的話,要慎用this,因為thread用回建立多個物件

3.共享資料:多個執行緒需要共同來操作的變數,要明確那部分是操作共享資料的**。

方式二:同步方法

public synchronized void  show()

注:1.對於非靜態的方法而言,使用同步的話,預設鎖是:this,如果使用繼承方式的話,this要慎用。

2.對於靜態的方法而言,使用同步的話,預設鎖是:當前類物件,所以繼承的方式實現多執行緒的話不可以用同步方法來實現執行緒的安全。

總結鎖:

會釋放鎖的方法:wait();

不會釋放鎖的方法: sleep() yield()

死鎖:不同的執行緒分別占用對方的所須的同步資源不放棄,都在等待對方放棄自己所需要的同步資源,就會形成死鎖的!我們在使用同步的時候要避免死鎖的出現。

1.執行緒通訊的三個方法:

wait();  等待,此時物件釋放了鎖,等待物件使用notify()來啟用它

notify();  notifyall();  啟用

注:這三個方法必須在同步**塊或者同步方法中使用!

例題:1-100的交替列印.2生產者消費者的模型

多執行緒問題

問題描述 有4個執行緒和1個公共的字元陣列。執行緒1的功能就是向陣列輸出a,執行緒2的功能就是向字元輸出b,執行緒3的功能就是向陣列輸出c,執行緒4的功能就是向陣列輸出d。要求按順序向陣列賦值abcdabcdabcd,abcd的個數由執行緒函式1的引數指定。注 c語言選手可使用windows sdk...

多執行緒問題

執行緒先達到corepoolsize,達到了去排隊 佇列滿了就去新建執行緒,達到了maxpoolsize 就執行拒絕策略了。所以大家在取queuesize的時候,就要取getthreadpoolexecutor getpoolsize getthreadpoolexecutor getqueue s...

多執行緒問題

多執行緒的實現方式 1.繼承thread類 2.實現runnable介面 3.實現callable介面 資源類實現callable介面,main方法中 futuretask ft new futuretask 實現callable介面的資源類的物件 new thread ft,threadname ...