執行緒狀態及基本方法

2022-08-30 09:48:09 字數 4600 閱讀 3074

}虛擬機器實際呼叫的方法

設定該執行緒為守護執行緒,守護執行緒是一種特殊的執行緒,主要是為其他執行緒提供服務.被守護的執行緒一旦銷毀,那麼守護執行緒也沒有存在的必要了.

示例1: innerthread設定為thread的守護執行緒,模擬心跳傳送.如果連線中斷,則心跳中斷.

public class deamonthread 

} catch (exception e)

});innerthread.setdaemon(true);

innerthread.start();

try catch (exception e)

});t.start();

} }

執行結果

傳送心跳

傳送心跳

t thread done

執行緒休眠示例一: 執行緒執行2秒列印一次

public class mythread extends thread

} catch (interruptedexception e) }}

執行結果

main is running

main is running

main is running

main is running

wait():執行緒釋放鎖,並進行等待,直至接到通知或被中斷.

public class waittest  catch (interruptedexception e) 

system.out.println("end");}}

public static void main(string args)

執行結果:

connected to the target vm, address: '127.0.0.1:55626', transport: 'socket'

start

notify(): 如果有多個執行緒等待,那麼執行緒規劃器隨機挑選出乙個wait的執行緒,對其發出通知notify(),並使它等待獲取該物件的物件鎖。注意"等待獲取該物件的物件鎖",這意味著,即使收到了通知,wait的執行緒也不會馬上獲取物件鎖,必須等待notify()方法的執行緒釋放鎖才可以。和wait()一樣,notify()也要在同步方法/同步**塊中呼叫

示例: 呼叫notify方法後,notify執行緒執行完畢釋放鎖的時候wait()方法才可以繼續持有鎖執行

package com.company;

public class mythread1 extends thread

@override

public void run()

}

package com.company;

public class mythread2 extends thread

@override

public void run()

}

package com.company;

public class threaddomain catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "end to wait");}}

public void notifymethod(object lock) catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "end to notify");}}

public static void main(string args)

}

執行結果:

connected to the target vm, address: '127.0.0.1:56026', transport: 'socket'

thread-0start to wait

thread-2start to notify

thread-2end to notify

thread-1start to notify

thread-1end to notify

thread-0end to wait

disconnected from the target vm, address: '127.0.0.1:56026', transport: 'socket'

process finished with exit code 0

notifyall(): 利用object物件的notifyall()方法可以喚醒處於同一監視器下的所有處於wait的執行緒

package com.company;

public class mythread2 extends thread

@override

public void run()

}

package com.company;

public class threaddomain catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "end to wait");}}

public void notifymethod(object lock) catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "end to notify");}}

public static void main(string args) catch (interruptedexception e)

mythread4.start();}}

執行結果:

thread-1start to wait

thread-2start to wait

thread-0start to wait

thread-3start to notify

thread-3end to notify

thread-0end to wait

thread-2end to wait

thread-1end to wait

interuppt():在乙個執行緒中呼叫另乙個執行緒的interrupt()方法,即會向那個執行緒發出訊號——執行緒中斷狀態已被設定。 通俗來講就是:只是給另外乙個執行緒打上乙個標識,標記這個執行緒需要被中斷.

package com.company;

public class interrupttest extends thread else }}

public static void main(string args)

}

執行結果: 執行緒並沒有被中斷

thread-0is interrupted,but still run

thread-0is interrupted,but still run

thread-0is interrupted,but still run

thread-0is interrupted,but still run

thread-0is interrupted,but still run

thread-0is interrupted,but still run

isinterrupted():判斷執行緒是否被中斷

interrupted():清除中斷標記

- 執行緒被中斷時,``interrupted()``返回true

- 執行緒未被中斷時,``interrupted()``返回false

join():會使呼叫join()的執行緒所在的執行緒無限阻塞,直至呼叫join()方法的執行緒銷毀為止.

public class mythread extends thread 

}public static void main(string args) throws exception

}

執行緒狀態及常用方法

建立 就緒 執行 阻塞 結束 建立 當使用new建立新的執行緒時,處於建立狀態 就緒 呼叫start方法後,執行緒並不是立即處於執行狀態,而是出於就緒態 執行 當執行緒被分配cpu後,執行run方法後才處於執行狀態 阻塞 執行緒因為某些原因讓出cpu使用權,直到重新進入執行態 如呼叫sleep方 法...

執行緒的基本狀態 執行緒例題

x 比如在該執行緒之前有乙個執行緒呼叫了join,搶占了cpu執行權,剛好搶占的執行緒呼叫了interupt,導致其執行緒中斷,將cpu讓出,原來執行緒可以從阻塞到就緒態,繼續搶cpu y 有資格進行搶鎖活動 主要是平時很少用到synchronized方法,多實踐一下 1 子執行緒迴圈10次,接著主...

執行緒的基本概念 執行緒的基本狀態以及狀態之間的關係

乙個程式中可以有多條執行線索同時執行,乙個執行緒就是程式中的一條執行線索,每個執行緒上都關聯有要執行的 即可以有多段程式 同時執行,每個程式至少都有乙個執行緒,即main方法執行的那個執行緒。如果只是乙個cpu,它怎麼能夠同時執行多段程式呢?這是從巨集觀上來看的,cpu一會執行a線索,一會執行b線索...