}虛擬機器實際呼叫的方法
設定該執行緒為守護執行緒,守護執行緒是一種特殊的執行緒,主要是為其他執行緒提供服務.被守護的執行緒一旦銷毀,那麼守護執行緒也沒有存在的必要了.
示例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線索...