java 多執行緒
Java多執行緒
建立多執行緒
通過以下兩種方法建立 Thread 物件:
方法一:宣告一個Thread類的子類,並覆蓋run()方法。
class mythread extends Thread {
public void run( ) {
/* 覆蓋該方法*/
}
}
方法二:宣告一個實現Runnable介面的類,並實現run()方法。
class mythread implements Runnable{
public void run( ) {
/* 實現該方法*/
}
}
方法一定義的執行緒,要觸發一個新執行緒,使用 start()方法,如:
Mythread t = new Mythread();
t.start();
方法二要觸發一個新執行緒,先要封裝成一個Thread類的執行緒物件後,使用 start() 方法,如:
Mythread my = new Mythread();
Thread t=new Thread(my);
t.start();
在呼叫 start() 方法時,它將自動觸發 run() 方法,從而開啟子執行緒。run() 方法中的程式碼定義執行執行緒所需的功能。
注意
此方法比MyThread1中多一步,原因是MyThread1繼承了類Thread,而類Thread已經實現過介面Runnable。
總結
兩種方式雖然產生執行緒的步驟有區別,但從本質上來說,總體區別不大
只是如果一個類在定義為執行緒類的同時,還需要繼承另一個非執行緒的類,則此時要實現執行緒只能通過呼叫Runable介面的方式。
執行緒的生命週期
可能使執行緒暫停執行的條件:
執行緒優先順序比較低,因此它不能獲得 CPU 時間。
1.使用 sleep( ) 方法使執行緒睡眠,但不讓出cpu等資源的控制權,然後休眠結束後自動喚醒後執行。
2.通過呼叫 wait( ) 方法,使執行緒等待,直到取消等待後執行。 一般需與synchronized配合使用(執行緒被中斷)
3.通過呼叫 yield( ) 方法:
1)執行緒已顯式的方式出讓CPU控制權;
2)只將控制權交給同級或更高優先順序的其他執行緒
3)有很大的可能在其他執行緒執行完成後,為yield方法的呼叫執行緒再次奪回cpu繼續執行。
start()與run()方法區別:
start() : 它的作用是啟動一個新執行緒,新執行緒會執行相應的run()方法。start()不能被重複呼叫。
run() :直接呼叫run()方法就和普通的成員方法一樣,可以被重複呼叫,並不會啟動新執行緒會在當前執行緒(一般是主執行緒)中執行run()。
Thread類中的重要方法:
this.currentThread().getName()
返回當前執行緒的名稱
final boolean isAlive()
如果執行緒是啟用的,則返回 true
static void sleep( )
用於將執行緒掛起一段時間
static void yield()
使正在執行的執行緒臨時暫停,並允許其他執行緒執行
final void join( ) throws InterruptedException
一個執行緒可在其他執行緒上呼叫join()方法,則當前執行的執行緒將被掛起,直到目標執行緒執行結束它才恢復執行。也可以在呼叫join()方法時帶上一個超時引數,這樣若目標執行緒在指定時間到時還未結束的話,join()方法也總能返回。
void start( )
呼叫run( )方法啟動執行緒,開始執行緒的執行
static int activeCount( )
返回啟用的執行緒數
final int getPriority()
返回執行緒的優先順序
final void setPriority(int newp)
修改執行緒的當前優先順序
注意:執行緒的優先順序分為1-10這10個等級,如果小於1或大於10,則丟擲異常throw new IllegalArgumentException(),預設是5。優先順序高的執行緒獲取CPU資源的概率較大,優先順序低的並非沒機會執行。
synchronized同步
有時兩個或多個執行緒可能會試圖同時訪問一個資源。
在此情況下,資料可能會變得不一致。
為了確保在:
1)任何時間點
2)一個共享的資源
3)只被一個執行緒使用,使用了“同步”。
synchronized實現同步成功的幾種方式:
方式一:基本方式
執行緒繼承類Thread或介面Runnable實現,分別在方法和語句塊前實現同步鎖定。
public class Station extends Thread{}
public class COval extends Panel implements Runnable{}
方式二:類鎖定方式
分別在靜態方法、靜態語句塊、類物件前使用synchronized實現同步
public synchronized void test1(){}
public void test2() {
synchronized(this){
//程式碼
}
}
相關文章
- Java多執行緒-執行緒中止Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- java多執行緒Java執行緒
- Java - 多執行緒Java執行緒
- java——多執行緒Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- java多執行緒9:執行緒池Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- Java多執行緒(一)多執行緒入門篇Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- java使用多執行緒Java執行緒
- Java--多執行緒Java執行緒
- java 多執行緒CountDownLatchJava執行緒CountDownLatch
- java多執行緒原理Java執行緒
- java 多執行緒-3Java執行緒
- java 多執行緒-2Java執行緒
- java 多執行緒 –同步Java執行緒
- java 多執行緒 --同步Java執行緒
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- 【Java】【多執行緒】執行緒的生命週期Java執行緒
- Java多執行緒詳解——一篇文章搞懂Java多執行緒Java執行緒
- 深入淺出Java多執行緒(十二):執行緒池Java執行緒
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- java多執行緒5:執行緒間的通訊Java執行緒
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- Java多執行緒之守護執行緒實戰Java執行緒
- Java 多執行緒售票示例Java執行緒