1. 程式人生 > >java多執行緒學習筆記(高階)

java多執行緒學習筆記(高階)

1.程序和程序之間的記憶體是獨立的。
2.多程序的程式是為了提高CPU的使用率。
3.多執行緒不是為了提高執行速度,而是為了提高應用程式的使用率。
4.執行緒和執行緒共享“堆記憶體和方法區記憶體”,棧記憶體是獨立的也就是說一個執行緒一個棧。
5.關於java程式的執行原理:java命令會啟動java虛擬機器JVM,也就等同於啟動了一個應用程式(程序)。該程序會啟動一個“主執行緒”,該主執行緒會啟動某一個類的main方法,所以主執行緒執行在主執行緒中。
6.t.stare();//該方法執行瞬間結束,就是告訴JVM分配一個新的執行緒棧給執行緒t。也就是說main()方法結束,程式不一定結束。這個新的棧呼叫run()方法。
7.t.run();//這是普通方法呼叫,只有一個執行緒,當前run方法結束之後下面的程式才會執行。
8.Thread.sleep();該方法是一個靜態方法,作用是阻塞當前執行緒。 這個方法在那個執行緒中就阻塞的是哪個執行緒。
9.t03.interrupt();// 喚醒t03執行緒。中段執行緒的休眠。使用的是異常處理機制。觸發InterruptedException的異常。
10.如何正確的終止我們的執行緒,使用全域性變數,改變全域性變數的值,解除休眠。一般使用boolean型別。
11.Java執行緒排程yield與join     http://www.cnblogs.com/tankaixiong/articles/4737014.html  (執行緒讓位和執行緒合併)。
12.非同步程式設計模型:t1,t2 兩個執行緒,t1執行緒執行t1的,t2執行緒執行t2的,兩個執行緒直接沒有相互的等待。
13.同步程式設計模型:t1,t2 兩個執行緒,t2執行緒的執行必須得等待t1執行緒執行結束才能執行。
14.使用執行緒同步的條件
   1),必須存在多執行緒環境。
   2),多執行緒存在共享同一資料。
   3),共享資料涉及到修改操作。
15.關於執行緒同步的 synchronized 的使用方法。
   1),synchronized(this){ //共享程式碼塊}  也就是說由synchronized包住的程式碼塊添加了鎖,當一個執行緒獲得了該鎖,則其他執行緒只能等待該執行緒釋放該鎖之後才能執行。
   2),synchronized 可以修飾某個方法,例如: public synchronized void takeMoney(double money){} 表示為該方法添加了鎖。排程如上。
   3),synchronized 可以修飾某個static 方法,表示添加了類鎖,執行緒在呼叫該方法的時候會呼叫類鎖。類鎖只有一個。
16.關於守候執行緒:執行緒可以分為使用者執行緒和守候執行緒。我們上面所以的執行緒都是使用者執行緒。守候執行緒守候的是使用者執行緒,就是還有一個使用者執行緒還在執行的話,守候執行緒也是不會停止工作的。java中的垃圾回收機制就是一個守候執行緒。 守護執行緒一般是無限迴圈的,可以將一個將一個使用者執行緒t1設定t1.setDaemon(true);標記為守候執行緒。
17.java.util.Timer 是一個定時任務類。裡面有一個 public void schedule(TimerTask task, Date firstTime, long period);方法。
18.執行緒之間的通訊