對於多執行緒的一些理解

2021-09-01 09:31:48 字數 1802 閱讀 6352

實現多執行緒的兩種方法:

繼承thread類

實現runnable介面

(jdk1.5之後提供了乙個心得callable介面)

在啟動多執行緒的時候必須通過start()方法,而不能直接呼叫run()方法

原因:先來看下start()方法在thread類中的定義:

public synchronized void start()

private native void start0();

start()方法呼叫時會丟擲「illegalthreadstateexception」異常,一般在重複呼叫的時候會丟擲,而實際上正真呼叫的是start()方法。此方法在宣告時使用了native關鍵字宣告,表示呼叫本機的作業系統函式。因為多執行緒需要依靠底層作業系統的支援。

乙個類如果只能繼承thread類才能實現多執行緒,則肯定會受到單繼承的侷限,所以一般來說,要實現多執行緒,可以通過實現runnable介面完成;

實現runnable介面可以資源共享

package thread;

/** * 實現runnable介面可以資源共享

* */

public class basethread implements runnable

} }public static void main(string args)

}

結果:

賣票:ticket = 5

賣票:ticket = 3

賣票:ticket = 4

賣票:ticket = 1

賣票:ticket = 2

執行緒的休眠   執行緒的中斷

package thread;

/** * 執行緒的休眠

* 執行緒的中斷

* */

public class interruptthread implements runnable catch (interruptedexception e)

system.out.println("4.run方法正常結束!");

} public static void main(string args) catch (interruptedexception e)

t.interrupt();

}}

執行緒的強制執行 

package thread;

/** * 執行緒的強制執行

* */

public class jointhread implements runnable

} public static void main(string args) catch (interruptedexception e)

}system.out.println(thread.currentthread().getname()+"執行main -->" +i);

} }}

執行緒禮讓 

package thread;

/** * 執行緒禮讓

* */

public class yieldthread implements runnable

} }public static void main(string args)

}

多執行緒案例(設計乙個生產與消費的程式,要求,生產一台,就消費一台,如果沒有新的,就等待生產出來,在消費,如果生產出來的沒有被消費,則等待消費之後再生產。)

模擬競拍、搶答器:

C 多執行緒的一些理解

c 多執行緒程式設計有多種方法,傳統方法稍微繁瑣,不易理解,現給出一demo示例,說明執行同一任務達到並行執行的效果,從而提高程式效率。include include include opencv2 opencv.hpp using namespace std using namespace cv ...

對於this和當前執行緒的一些理解

在學習這個inheritablethreadlocal類的時候,我對於有個地方一直沒有理解,我發現了盲點。1 private void init threadgroup g,runnable target,string name,2long stacksize,accesscontrolcontex...

對於切片的一些理解

使用技巧 type struct 乙個切片是由資料指標加上長度和容量組成的,類似與c 中的vector。var a int 等價於nil b int 表示乙個空的切片,不等於nil c int len,cap都為3的切片 d c 2 cap為3,len為2。與c共享一片記憶體位址 e c 0 2 c...