php第五章 补充案例,第5章 多线程 - 补充案例
博學谷——讓IT教學更簡單,讓IT學習更有效
2、sleep()是靜態方法,只能控制當前正在運行的線程休眠,而不能控制其它線程休眠。當休眠時間結束后,線程就會返回到就緒狀態,而不是立即開始運行。
案例5-6 線程讓步
一、案例描述
1、 考核知識點
編 號:00105009 名 稱:線程讓步
2、 練習目標
? 了解線程讓步的概念和作用 ? 掌握設置線程讓步的方法
3、 需求分析
在校園中,我們經常會看到同學互相搶籃球,當某個同學搶到籃球后就可以拍一會,之后他會把籃球讓出來,大家重新開始搶籃球,這個過程就相當于Java程序中的線程讓步。在多線程程序中,可以通過線程的yield()方法將線程轉換成就緒狀態,讓系統的調度器重新調度一次,達到線程讓步的目的。案例中將在一個多線程程序中,通過yield()方法對其中一個線程設置線程讓步來演示。
4、 設計思路(實現原理)
1) 自定義一個類Demo,使其實現Runnable接口。
2) 在Demo類中覆寫run()方法,在方法內編寫一個for循環,循環體內,先執行線程讓步的方
法yield(),然后輸出打印:線程名稱+循環次數。 3) 編寫測試類Example06,在Example06類的main()方法中,創建一個Demo對象,利用Thread
的構造方法創建兩個線程對象,并執行線程對象的start()方法,同時編寫for循環,循環內打印“main:”+當前循環次數。
二、案例實現
class Demo implements Runnable{ }
public class Example06 {
public static void main(String[] args)throws Exception {
Demo d = new Demo(); Thread t0 = new Thread(d); Thread t1 = new Thread(d);
9
public void run(){ }
for(int x = 0 ; x < 5 ; x++){ }
Thread.yield();
System.out.println(Thread.currentThread().getName()+\
博學谷——讓IT教學更簡單,讓IT學習更有效
}
}
t0.start(); t1.start();
for(int x = 0 ; x<5 ; x++){ }
System.out.println(\
運行結果如圖5-6所示。
圖5-6
運行結果
三、案例總結
1、在多線程程序中,可以通過設置線程讓步,讓系統的調度器重新調度一次CPU的分配。
2、線程讓步和線程休眠是不一樣的,線程讓步不會阻塞該線程,它只是將線程轉換成就緒狀態,而線程休眠,是讓線程在一定時間內進入休眠等待狀態,到達時間后線程再轉換成就緒狀態。
案例5-7 線程插隊
一、案例描述
1、 考核知識點
編 號:00105010 名 稱:線程插隊
2、 練習目標
? 了解線程插隊的概念和作用 ? 掌握線程插隊方法的使用
3、 需求分析
在火車站買票的時候,有的乘客著急趕火車,會插到隊伍前面先買車票,其他乘客再買票。那么在多線程程序中,也可以通過線程插隊,讓插隊的線程先執行完,然后本線程才開始執行。在案例中將通過使用join()方法來演示線程插隊。
4、 設計思路(實現原理)
1) 自定義一個類Demo,使其實現Runnable接口。
10
博學谷——讓IT教學更簡單,讓IT學習更有效
2) 在Demo類中覆寫run()方法,在方法內編寫一個for循環,循環體內打印:線程名稱+循環
次數。
3) 編寫測試類Example07,在Example07類的main()方法中,創建一個Demo對象,利用Thread
的構造方法創建兩個線程對象,分別命名“排隊隊員”和“插隊隊員”,然后編寫兩個線程對象的start()方法,然后調用“插隊隊員”線程的join()方法。
二、案例實現
class Demo implements Runnable { }
public class Example07 { }
public static void main(String[] args) { }
Demo jd = new Demo(); Thread t1 = new Thread(jd); Thread t2 = new Thread(jd); t1.setName(\排隊隊員\t2.setName(\插隊隊員\t1.start(); t2.start(); try { }
t2.join();
e.printStackTrace();
} catch (InterruptedException e) { public void run() { }
for (int x = 0; x < 5; x++) { }
System.out.println(Thread.currentThread().getName() + \
運行結果如圖5-7所示。
圖5-7
運行結果
11
博學谷——讓IT教學更簡單,讓IT學習更有效
三、案例總結
1、線程插隊,可以讓插隊的線程先執行完,然后本線程才開始執行。 2、使用線程插隊join()方法時,需要拋出InterruptedException異常。
案例5-8 同步代碼塊的使用
一、案例描述
1、 考核知識點
編 號:00105012 名 稱:同步代碼塊
2、 練習目標
? 掌握同步代碼塊作用
? 掌握同步代碼塊的使用方法 ? 掌握同步代碼塊中鎖對象的使用
3、 需求分析
生活中,會遇到兩人上洗手間的問題,甲使用洗手間的時候會鎖上門,乙看到門鎖上了,就需要等甲使用完后再使用的。那么在多線程程序中,可以通過將共享資源放在同步代碼塊內來實現多個線程同步處理共享資源的問題。本案例將通過兩個線程共享資源來演示同步代碼塊的使用。
4、 設計思路(實現原理)
1) 自定義一個類Demo,使其實現Runnable接口。 2) 在Demo類中覆寫run()方法,在方法內編寫synchronized同步代碼塊,在進入同步代碼塊時,
打印線程名稱,然后編寫一個for循環,循環體內打印:運行線程名稱+循環次數。當循環次數等于3時,跳出循環。 3) 編寫測試類Example08,在Example08類的main()方法中,創建一個Demo對象,利用Thread
的構造方法創建兩個線程對象,分別命名“張三”和“李四”,執行兩個線程的start()方法。
二、案例實現
class Demo implements Runnable {
private Object obj = new Object(); public void run() {
synchronized (obj) {
System.out.println(Thread.currentThread().getName()
+ \進入洗手間,門以鎖上\
for (int i = 1; i < 10; i++) {
System.out.println(Thread.currentThread().getName()
+ \正在使用洗手間\
if (i == 3) {
12
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的php第五章 补充案例,第5章 多线程 - 补充案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php读取部分文章显示不出来了,织梦使用
- 下一篇: vscode php输出,js程序如何在