線程的狀態---十九
/**
* 1)線程的狀態
* 阻塞(sleep(),yiled(),jion())
* / \
* / \
* (new)新生--(start())就緒-------運行-----死亡()
* 2)停止線程(建議下面2中方式,溫柔不暴力)
* 1、自然終止:線程體執行完畢,結束任務
* 2、外部干涉
* a、定義flag屬性標識 b、線程體使用flag標識 c、對外提供改變flag屬性的方法
* 3)線程阻塞
* 1、join(合併線程)成員方法:t.join()方法阻塞調用此t成員方法jion的線程(calling thread),直到線程t完成,
* 此線程再繼續;通常用於在main()主線程內,等待t線程完成再結束main()主線程。
* 從這裏應該能猜的到,Thread類的jion方法是加鎖的,並且是個陷進,誰調用,誰在外面等。
* 2、yield靜態方法: 暫停自己的線程,讓出cpu調度,品格高尚!
* 3、sleep靜態方法:休眠(睡覺),不釋放鎖 (抱着鎖睡),其他線程不能訪問,除非睡醒,結束線程。
* 應用場景:a、倒計時 b、模擬網絡延時
*/
public class StateThr {
public static void main(String[] args) throws InterruptedException {
FourThr fth=new FourThr("馬雲"); //新生
Thread proxy=new Thread(fth,"黃牛甲");
proxy.start();//就緒
//就緒後,等待cpu調度分配時間片---運行
Thread.sleep(5000);//放票時間5秒
fth.stop();//線程終止,死亡
}
}
class FourThr implements Runnable{
private int tickets=50;
private String name;
private boolean flag=true;
public FourThr(String name) {
this.name = name;
}
@Override
public void run() {//線程體
while(flag){
try {
task();
Thread.sleep(500); //模擬延時時間,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",幫"+this.name+",搶到第"+(tickets--)+"張票");
}
}
public void stop(){
flag=false;
}
}
* 1)線程的狀態
* 阻塞(sleep(),yiled(),jion())
* / \
* / \
* (new)新生--(start())就緒-------運行-----死亡()
* 2)停止線程(建議下面2中方式,溫柔不暴力)
* 1、自然終止:線程體執行完畢,結束任務
* 2、外部干涉
* a、定義flag屬性標識 b、線程體使用flag標識 c、對外提供改變flag屬性的方法
* 3)線程阻塞
* 1、join(合併線程)成員方法:t.join()方法阻塞調用此t成員方法jion的線程(calling thread),直到線程t完成,
* 此線程再繼續;通常用於在main()主線程內,等待t線程完成再結束main()主線程。
* 從這裏應該能猜的到,Thread類的jion方法是加鎖的,並且是個陷進,誰調用,誰在外面等。
* 2、yield靜態方法: 暫停自己的線程,讓出cpu調度,品格高尚!
* 3、sleep靜態方法:休眠(睡覺),不釋放鎖 (抱着鎖睡),其他線程不能訪問,除非睡醒,結束線程。
* 應用場景:a、倒計時 b、模擬網絡延時
*/
public class StateThr {
public static void main(String[] args) throws InterruptedException {
FourThr fth=new FourThr("馬雲"); //新生
Thread proxy=new Thread(fth,"黃牛甲");
proxy.start();//就緒
//就緒後,等待cpu調度分配時間片---運行
Thread.sleep(5000);//放票時間5秒
fth.stop();//線程終止,死亡
}
}
class FourThr implements Runnable{
private int tickets=50;
private String name;
private boolean flag=true;
public FourThr(String name) {
this.name = name;
}
@Override
public void run() {//線程體
while(flag){
try {
task();
Thread.sleep(500); //模擬延時時間,阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void task(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+",幫"+this.name+",搶到第"+(tickets--)+"張票");
}
}
public void stop(){
flag=false;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.