在學習多執行緒時,如果聯絡作業系統來學習,會覺得很好理解。因為學習作業系統時候,有同步,互斥,鎖的一些概念~
8.加入執行緒
(1)join,當前執行緒暫停,等待指定的執行緒執行結束後,當前執行緒再繼續
(2)join(int),可以等待指定的毫秒之後繼續,交替繼續
9.禮讓執行緒
yield讓出cpu
10.設定執行緒的優先順序,最小的優先順序是1,最大是10,預設是5
setpriority()
11.什麼情況下需要使用同步
如果多執行緒併發,有多段**同時執行時,我們希望某一段**執行的過程中cpu不要切換到其他執行緒工作,這時就需要同步
如果兩段**是同步的,那麼同一時間只能執行一段,在一段**沒執行結束之前,不會執行另一段**
12.同步**塊
使用synchronize關鍵字加上乙個鎖物件來定義一段**,就叫做同步**塊
多個同步**塊如果使用相同的鎖物件,那麼他們就是同步的
13.同步方法
使用synchronized關鍵字修飾的乙個方法,該方法中所有的**都是同步的
非靜態的同步方法的鎖物件是this,靜態的同步方法的鎖物件是該類的位元組碼物件,即pr2.class
14.執行緒安全問題,用火車站售票例子解釋
15.死鎖:多執行緒同步時,如果同步**巢狀,使用相同鎖,就有可能出現死鎖,為了避免,不要出現同步**塊巢狀
16.一般來說,通過檢視類的原始碼,如果存在synchronized,則大部分可認為是執行緒安全的。
比如:vector是執行緒安全的,arraylist是執行緒不安全的
stringbuffer是執行緒安全的,stringbuilder是執行緒不安全的
hashtable是執行緒安全的,hashmap是執行緒不安全的
package pra_20;
public class j_39 }};
thread th2=new thread() catch (interruptedexception e)
}system.out.println("2");}}
};th1.start();
th2.start();
//9.禮讓執行緒
new mythread2().start();
new mythread2().start();
//10.設定執行緒的優先順序
thread th3=new thread()}};
thread th4=new thread()}};
th3.setpriority(10);
th4.setpriority(3);
th3.start();
th4.start();
//12.同步**塊
final pr p1=new pr();
new thread()
}}.start();
new thread()
}}.start();
//13.同步方法
final pr2 p2=new pr2();
new thread()
}}.start();
new thread()
}}.start();
//14.執行緒安全問題
new ticket().start();
new ticket().start();
new ticket().start();
new ticket().start(); }}
class ticket extends thread catch (interruptedexception e)
system.out.println("這是第"+ticket--+"張票");
}} }
}//為了實現同步方法建立的類(非靜態)
class pr2
public void pri2() }}
//為了實現同步方法建立的類(靜態)
class pr3
public static void pri2() }}
//為了實現同步**塊建立的類
class pr
} public void pri2() }}
class suo
class mythread2 extends thread
system.out.println(getname()+"~~~~"+i);
} }}
Java 多執行緒 二
執行緒安全問題 引出同步 塊 通過下面的例子,了解傳統多執行緒存在的執行緒安全隱患。需求 買票 四個視窗同時買票。class ticket implements runnable extends thread catch exception e system.out.println thread.c...
java多執行緒使用
首先說一下多執行緒的應用場景吧 eg 1 2 3 1億 最開始測試用的是1兆,但是超過了double的範圍,計算的資料不準確,用bigdecimal太麻煩了 如何快速運算出資料結果 常規演算法 public static void main string args system.out.printl...
java多執行緒學習(二)執行緒的基本方法
sleep long millis 作用是讓當前執行緒休眠指定的毫秒,使當前執行緒進入阻塞狀態,期間會讓出cpu的資源,但不會釋放已獲得的鎖.到達指定時間後,執行緒會從阻塞狀態變成 可執行狀態,重新競爭cpu的資源 static void sleep long millis 這是thread類中的靜...