動視暴雪部分股東要求CEO鮑比·科蒂克辭職
阿新 • • 發佈:2021-11-18
執行緒狀態
- (一)五大狀態
- 詳細
- 執行緒方法
停止執行緒
- 不推薦是同JDK提供的stop()、destroy()方法。【已廢棄】
- 推薦執行緒自己停止下來
- 建議使用一個標誌位進行種植變數當flag=false,則終止程序。
package com.xiancheng.state; //測試停止執行緒(stop) //1.建議此案成正常停止--->利用此說,不建議死迴圈 //2.建議使用編制位--->設定一個標誌位 //3.不要使用stop()、destroy()等過時或者JDK不建議使用的方法 public class TestStop implements Runnable{ //1.設定一個標誌位 boolean flag = true; @Override public void run() { int i = 0; while (flag){ System.out.println("run ....Thread"+i++); } } //設定一個公開的方法停止,轉換標誌位 public void stop(){ this.flag = flag; } public static void main(String[] args) { TestStop testStop = new TestStop(); new Thread().start(); for (int i = 0; i < 1000; i++) { System.out.println("main"+i); if (i==900){ //呼叫stop方法切換標誌位,讓執行緒停止 testStop.stop(); System.out.println("執行緒該停止了"); } } } }
執行緒休眠
-
sleep(時間)指定讓錢執行緒組設的毫秒數;
-
sleep存在異常InterruptedException;
-
sleep時間達到後執行緒進入就緒狀態;
-
sleep可以模擬網路延時,倒計時等。
-
每一個物件都有一個鎖,sleep不會釋放鎖;
延時搶票(存在不安全的情況)
package com.xiancheng.state; //模擬網路延時,放大問題的發生性. public class TestSleep implements Runnable{ //票數 private int ticketNums = 10; @Override public void run() { while (true){ if (ticketNums<=0){ break; } //模擬延時 try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNums--+"張票"); } } public static void main(String[] args) { TestSleep ticket = new TestSleep(); new Thread(ticket,"小明").start(); new Thread(ticket,"老師").start(); new Thread(ticket,"黃牛黨").start(); } }
模擬倒計時
package com.xiancheng.state; //模擬倒計時 public class TestSleep2 { public static void main(String[] args) { try { tenDown(); } catch (InterruptedException e) { e.printStackTrace(); } } //模擬倒計時 public static void tenDown() throws InterruptedException { int num = 10; while(true){ Thread.sleep(1000); System.out.println(num--); if (num<=0){ break; } } } }
獲取系統當前時間
package com.xiancheng.state;
import java.text.SimpleDateFormat;
import java.util.Date;
//模擬倒計時
public class TestSleep2 {
public static void main(String[] args) {
//列印當前系統時間
Date startTime = new Date(System.currentTimeMillis());//獲取系統當前時間
while (true){
try {
Thread.sleep(1000);
System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime));
startTime = new Date(System.currentTimeMillis());//更新當前時間
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//模擬倒計時
public static void tenDown() throws InterruptedException {
int num = 10;
while(true){
Thread.sleep(1000);
System.out.println(num--);
if (num<=0){
break;
}
}
}
}
執行緒禮讓
- 禮讓執行緒,讓當前正在執行的執行緒暫停,但不阻塞。
- 將執行緒從執行狀態轉為就緒狀態
- 讓CPU重新排程,禮讓不一定成功,看CPU心情
package com.xiancheng.demo02;
//測試禮讓執行緒
//禮讓不一定成功,看CPU心情
public class TestYield {
public static void main(String[] args) {
MyYield myYield = new MyYield();
new Thread(myYield,"a").start();
new Thread(myYield,"b").start();
}
}
class MyYield implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"執行緒開始執行");
Thread.yield();//禮讓
System.out.println(Thread.currentThread().getName()+"執行緒停止執行");
}
}
禮讓成功
禮讓失敗