今天學完IT十八掌第八天java基礎課程:
學習內容:
複習jar命令
---------------
[將類路徑下的類打成jar文件]
jar cvf myjar.jar -C classes/ .
jar cvfe myjar.jar a.a1.a11.a111.A -C classes/ . //e指定的入口點.
[使用java -jar參數來運行程序]
java -jar myjar.jar //執行jar文件
java -jar myjar.jar a.a1.a11.a111.A //執行jar文件指定入口點。
進程
-----------------
進程之間內存式隔離的。內存不共享。
eg:掃雷,qq
線程
-----------------
程序執行過程中,併發執行的代碼段。
線程之間可以共享內存。
Thread : 線程類。
start() //通知cpu,可以開始執行該線程。
run() //線程具體執行的代碼段。
Thread t = new Thread();
t.start();
Thread.currentThread() //得到當前的執行線程。
yield() //讓線程放棄cpu的搶佔權。
join() //等待當前進程完成,
sleep(int mils) //讓當前線程休眠指定的毫秒數.
線程安全:增加了同步處理。確保在同一時刻,只有一個線程執行同步代碼。
同步方法使用的當前對象作爲同步對象。
靜態方法可以加同步處理,使用Class作爲同步對象。
KTV :
Box : //3
Waiter //守護線程 daemon Thread.setDaemon(true);
yield()
join()
sleep(int ms);
setDaemon(true); //線程啓動前設置
isDaemon(); //指定線程是否是守護線程
start(); //啓動線程
run(); //
notify() //選擇一個監控器對象等待隊列中的線程進行通知。
notifyAll() //選擇所有監控器對象等待隊列中的線程進行通知。
wait() //將當前線程放入監控器的等待隊列中。
wait(int n ) //線程進入到等待隊列後,最多等待n長時間,時間一旦,自動喚醒。
生產者 + 消費者問題
------------------------
List list = new ArrayList(); //數組列表
List<Integer> list = new ArrayList<Integer>(); //使用泛型,創建一個整數數組列表
遇到的問題:
1,多線程的生產消費問題。
|---兩個線程操作同一個資源,首先需要保證操作資源時同步(synchronized),其次應該保證資源存 取和取出是有意義的。也就是線程之間通信正常(notify,wait)。還有就是注意死鎖。
2,集合List以及泛型使用。
|---將以特定次序存儲元素。所以取出來的順序可能和放入順序不同。
元素是有序的,元素可以重複,因爲該集合體繫有索引。
3,多線程中的死鎖問題,什麼時候該使用yield(),notify,notifyAll,wait()
死鎖是進程死鎖的簡稱, 產生死鎖的原因有兩個
一種原因是系統提供的資源太少了,遠不能滿足併發進程對資源的需求。
另一種原因是由於進程推進順序不合適引發的死鎖。
需要幫助的問題
1,生產消費問題
2,死鎖
3,集合