常見的兩種執行緒建立方式:繼承thread類和實現runnable介面
具體例子:這裡說明一點比較常用繼承來實現介面,以為比較簡單化。
package test;
import org.junit.test;
public class testthread catch (interruptedexception e) }}
//1,繼承(extendsthread)
class mythread extends thread }}
//實現(implements runnable)
class mythread1 implements runnable
}}
結果輸出:
當前執行緒名:thread[main,5,main];3
當前執行緒名:thread[main,5,main];2
當前執行緒名:thread[main,5,main];1
當前執行緒名:thread[main,5,main];3
當前執行緒名:thread[main,5,main];2
當前執行緒名:thread[main,5,main];1
當前執行緒名:thread[thread-2,5,main];4
當前執行緒名:thread[thread-2,5,main];3
當前執行緒名:thread[thread-2,5,main];2
當前執行緒名:thread[thread-2,5,main];1
當前執行緒名:thread[thread-3,5,main];4
當前執行緒名:thread[thread-3,5,main];3
當前執行緒名:thread[thread-3,5,main];2
當前執行緒名:thread[thread-3,5,main];1
上面的例子如果你放開try…catch,並去掉執行緒沉睡,這將會體現出多執行緒的不安全性。
多次的執行結果會不同,比如:很顯然少了乙個「4」
當前執行緒名:thread[main,5,main];3
當前執行緒名:thread[main,5,main];2
當前執行緒名:thread[main,5,main];1
當前執行緒名:thread[main,5,main];3
當前執行緒名:thread[main,5,main];2
當前執行緒名:thread[main,5,main];1
當前執行緒名:thread[thread-2,5,main];4
當前執行緒名:thread[thread-2,5,main];3
當前執行緒名:thread[thread-2,5,main];2
當前執行緒名:thread[thread-3,5,main];4
當前執行緒名:thread[thread-2,5,main];1
當前執行緒名:thread[thread-3,5,main];3
當前執行緒名:thread[thread-3,5,main];2
當前執行緒名:thread[thread-3,5,main];1
多執行緒與高併發(一) 執行緒的概念 鎖
執行緒的歷史是非同步對於cpu效能壓榨的歷史。多程序批處理 多程序並行處理 多執行緒纖程 協程 程序執行緒 底層角度 繼承thread,重寫run方法。實現runnable介面,重寫run方法。使用lambda 第二種方法的變形 使用執行緒池啟動執行緒 本質也是前兩種方式之一 狀態是由jvm管理,管...
多執行緒基礎(一)執行緒建立
繼承thread類 自定義乙個類,繼承thread類 重寫run方法,run方法中用於定義當前執行緒的執行邏輯。建立執行緒類的物件 開啟執行緒 thread類中start 方法啟動執行緒 此案例展示第一種建立執行緒之方法 繼承thread類 說明 1.若 static 修飾 i,則共享i 關於thr...
多執行緒高併發
修飾靜態方法鎖的是class,非靜態鎖方法鎖的是this,只有拿到這個物件才可以繼續執行 synchronized是可重入鎖 執行緒1的方法1呼叫執行緒2的方法2,判斷是同一把鎖,在同乙個執行緒,可以呼叫。synchronized的鎖公升級 hotsport 鎖公升級過程 保證執行緒可見性 mesi...