多執行緒與高併發(一)

2021-10-22 09:45:16 字數 2459 閱讀 9391

官方概念:幾乎所有的作業系統都支援同時執行多個任務,乙個任務通常是乙個程式,每個執行中的程式就是乙個程序。當乙個程式執行時,內部可能包含了多個順序執行流,每個順序執行流就是乙個執行緒。

而執行緒呢,乙個程序裡最小的執行單元就叫乙個執行緒。簡單理解就是乙個程式不同的執行路徑。

示例:

public class t01_example catch (interruptedexception e) 

system.out.println("t1");}}

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

system.out.println("main");}}

}

當執行new t1().run()時,輸出結果為先輸出t1,t1輸出結束後才輸出main;當執行new t1().start()時,輸出結果為t1和main交替輸出。

1. 繼承thread類

2. 實現runnable介面

3. 使用callable和futuretask建立執行緒

4. 執行緒池建立執行緒

示例:

public class t02_threestart 

}static class myrun implements runnable

}static class mycall implements callable

}// 啟動執行緒的5種方式

public static void main(string args) ).start();

// 4

thread t = new thread(new futuretask(new mycall()));

t.start();

// 5

executorservice service = executors.newcachedthreadpool();

service.execute(() -> );

service.shutdown();}}

只能對處於新建狀態的執行緒呼叫start()方法,否則將引發illegalthreadstateexception異常。

執行緒生命週期圖如下:

簡單示例:

public class t04_threadstate catch (interruptedexception e) 

system.out.println(i);}}

}public static void main(string args) throws interruptedexception

}

sleep():讓當前正在執行的執行緒暫停一段時間,並進入阻塞狀態。

yield():讓當前正在執行的執行緒暫停,將執行緒轉入就緒狀態。

join():當在某個程式執行流中呼叫其他執行緒的join方法時,呼叫執行緒將會被阻塞,直到被join方法加入的join執行緒執行完為止。例如,t1和t2兩個執行緒,在t1某個點上呼叫t2.join,此時跑到t2去執行,t1等待t2執行完畢後再繼續t1自己的執行。

方法簡單示例:

public class t03_threadmethod 

// sleep 當前執行緒暫停一段時間讓別的執行緒去執行。sleep怎麼復活的?

// 由睡眠時間而定,等睡眠到規定時間自動復活

static void testsleep() catch (interruptedexception e)

}}).start();

}// yield 就是當前執行緒正在執行的時候停止下來進入等待佇列,回到等待佇列裡在系統

// 的排程演算法裡頭,還是依然有可能把你剛回去的執行緒拿回來繼續執行。當然,更大的可能性

// 是把原來等待的那些拿出乙個來執行,所以yield的意思是我讓出一下cpu,後面你們能不能

// 搶到那我不管。 即返回就緒狀態

static void testyield()

}}).start();

}// join, 意思就是在自己當前執行緒加入你呼叫join的執行緒,本執行緒等待。等呼叫的執行緒

// 執行完了自己再去執行。自己join自己沒有意義

static void testjoin()catch (interruptedexception e)

}});

thread t2 = new thread(() -> catch (interruptedexception e)

for (int i = 0; i < 10; i++) catch (interruptedexception e)

}});

t1.start();

t2.start();}}

多執行緒與高併發 一

建立乙個執行緒的兩種方式 繼承threadclass mythread extends thread newmythread start 實現runnable介面class mythread implements runnable newthread new myrun start 面試時候有時候會...

多執行緒與高併發

blocked 鎖池 timed waiting 定時等待 waiting 等待 terminated 禁止指令重排序 記憶體屏障 在單例雙重檢查中,不加會出現使用半初始化的值,也就是還未附初始值,指令重排導致的 類載入與指令重排的知識 public class spinlock while fla...

多執行緒與高併發程式設計(一)

一 thread.sleep 當前執行緒睡眠指定時間後回到就緒狀態 回到等待佇列 thread.yield 當前執行緒直接回到就緒狀態 回到等到佇列 thread.join 讓其他執行緒在此行執行後優先執行,等他執行完了,當前才開始執行 this.getstate 當前執行緒的狀態 六大狀態,run...