JavaSE習題 第八章 執行緒(未完成)
問答題
1.執行緒和程序是什麼關係?
程序是程式的一次動態執行,對應了從程式碼載入,執行至執行完畢的一個完整的過程
執行緒是比程序更小的執行單位,一個程序在其執行過程中可以產生多個執行緒,形成多條執行線索
2.執行緒有幾種狀態?
4種,新建,執行,中斷,死亡
3.引起執行緒中斷的常見原因是什麼?
1.執行了sleep
2.執行了wait
3.cpu資源切換給其他執行緒
4.進入阻塞狀態
4.一個執行緒執行完run方法後進行了什麼狀態?該執行緒還能呼叫start方法嗎?
死亡狀態,不能
5.執行緒在什麼狀態,呼叫isAlive返回false
死亡狀態
6.執行緒呼叫interrupt作用是什麼?
吵醒休眠的執行緒
7.將第8-11中的synchronized去掉,重新編譯,觀察執行結果
會出現重複
8.wait(),notify(),notifyAll()的作用
使執行緒進入掛起狀態(sleep的時間不確定)
喚醒一個掛起狀態的執行緒
喚醒所有掛起狀態的執行緒
9.TicketSeller中的迴圈條件while(fiveNumber<1)換成if(fiveNumber<1)可行嘛
不可行,while會迴圈,if只能判斷1次,可能會進行連續等待狀態
10.TicketSeller類中出現的 wait改成sleep(2000)重新編譯,觀察執行結果
11.什麼叫守護執行緒?
thread.setDaemon(true),則該執行緒為非守護執行緒
守護執行緒是在其他執行緒都執行完畢後立即中斷,那麼,該執行緒為守護執行緒(守護執行緒不穩定)
作業題
1.上機除錯8-1觀察結果是否相同
package cn.littlepage.game; public class Test2 { public static void main(String[] args) { WriteWordThread zhang, wang; zhang = new WriteWordThread("張"); wang= new WriteWordThread("王"); zhang.start(); for (int i = 0; i <= 80; i++) { System.out.println("我是主執行緒的語句"); } wang.start(); } } class WriteWordThread extends Thread { WriteWordThread(String s) { setName(s); } public void run() { for (int i = 1; i <= 80; i++) { System.out.println("我是一個執行緒,名字是" + getName()); } } }
不相同
2.上機除錯8-2,編寫3個執行緒,分別在命令列視窗輸出資訊//和第一題差不多
3.模仿8-4,編寫3個執行緒,使他們有更多的共享單元//使用implements runnable和第一題差不多,共享單元是new Thread(傳進同一個Thread的子類)
4.模仿8-12,編寫5個人同時買票,並規定賣票規則和排隊順序