建立多執行緒的幾種方式

2021-10-06 08:27:33 字數 2191 閱讀 4675

執行緒週期:

1、新建狀態:使用new關鍵字或者thread類或其他子類建立乙個執行緒物件之後,該執行緒就處於新建狀態,他保持這個狀態知道程式start()這個狀態。

2、就緒狀態:當執行緒物件呼叫了stsrt()方法後,這個執行緒就進入了就緒狀態,就緒狀態處於就緒佇列中,要等待ivm中線程排程器的排程。

3、執行狀態:如果執行緒獲取了cpu資源,就可以執行run()方法,這個時候執行緒就處於執行狀態,這個狀態的執行緒是最複雜的,它可以變為:阻塞狀態,死亡狀態,就緒狀態

4、阻塞狀態:如果乙個執行緒執行了sleep()、suspend()等方法,失去了所占用的資源之後,該執行緒就從執行狀態進入阻塞狀態,在重新獲得裝置資源後重新進入就緒狀態。可以分為三種情況:

(1)等待阻塞:執行中的執行緒執行wait()方法,執行緒進入等待阻塞狀態。

(2)同步阻塞:獲取synchronized 同步鎖失敗。

(3)其他阻塞:通過呼叫執行緒的 sleep() 或 join() 發出了 i/o 請求時,執行緒就會進入到阻塞狀態。當sleep() 狀態超時,join() 等待執行緒終止或超時,或者 i/o 處理完畢,執行緒重新轉入就緒狀態

5、死亡狀態:乙個執行狀態的執行緒完成任務或者其他終止條件發生時,這個執行緒就到終止死亡狀態。

建立執行緒:

runnable介面

thread類本身

callable和future建立

執行緒池runnable:

package thread;

public class thread_runnable catch (interruptedexception e)

});thread t = new thread(task);

t.start();

//get()的執行可能會導致當前現成的額阻塞

object o = task.get();

system.out.println(o);

system.out.println("hello world !!!");

}執行緒池提供了乙個執行緒佇列,佇列中就保持著等待的執行緒,避免每次都要建立執行緒和銷毀執行緒帶來的額外成本,從而提高效率。

public class threadpoolexecutortest

executorservice.shutdown();}}

class threadpool implements runnable

}

thread.currentthread()和this的區別

thread.currentthread()表示當前**段正在被哪個執行緒呼叫

this表示的是當前物件,

例項**:

package thread;

public class demo {

public static void main(string args) {

mythread mythread=new mythread();

thread thread=new thread(mythread);

thread.start();

public static class mythread extends thread {

public mythread() {

system.out.println("當前執行緒的名字:"+thread.currentthread().getname());

system.out.println("當前執行緒的名字:"+this.getname());

@override

public void run() {

//isalive判斷當前的執行緒是否處於活動狀態

system.out.println("當前執行緒的名字:"+thread.currentthread().getname()+"   run=="+thread.currentthread().isalive());

system.out.println("當前執行緒的名字:"+this.getname()+"  run=="+this.isalive());

執行結果:

當前執行緒的名字:main

當前執行緒的名字:thread-0

當前執行緒的名字:thread-1   run==true

當前執行緒的名字:thread-0  run==false  //這一塊為false是因為僅僅執行了構造方法,並沒有執行執行緒

多執行緒建立的幾種方式

第一種方式 建立 編寫乙個類 mythread1 這裡只是小生的自定義命名,方便與 裡名稱一致 讓它繼承 thread 類,並把需要多執行緒執行的程式放到 public void run 方法裡。啟動 在主函式中,new 出 mythread1 類的例項。執行 呼叫 mythread1 類的例項的 ...

多執行緒入門(1) 建立執行緒的幾種方式

用runnable方式建立執行緒 public class runnablestyle implements runnable public static void main string args 用thread方式實現執行緒 public class threadstyle extends th...

多執行緒 實現多執行緒的幾種方式

public class mythread extends thread mythread mythread1 newmythread mythread mythread2 newmythread mythread1.start mythread2.start public class mythre...