第四章 面向物件(上)3-類的結構之二:-3.5 java的值傳遞機制
阿新 • • 發佈:2022-05-18
執行緒一共有五大狀態
1.建立狀態 new
2.就緒狀態 呼叫start()方法
3.執行狀態 獲取cpu資源
4.阻塞狀態 執行緒休眠
5.死亡狀態 執行緒執行完畢
停止執行緒
//測試停止執行緒 //1.建議執行緒正常停止-->利用冊數,不建議死迴圈 //2.建議使用標誌位-->設定一個標誌位 //3.不要使用stop或者destroy等過時或者JDK不建議使用的方法 public class TestStop implements Runnable{ //設定標誌位 private boolean flag =true; @Overridepublic void run() { int i=0; while (flag){ System.out.println("執行緒開始-----------"+i++); } } //自己設定一個停止方法 public void stop1(){ this.flag =false; } public static void main(String[] args) { TestStop testStop = new TestStop();new Thread(testStop).start();
for (int i = 0; i < 1000; i++) {
System.out.println("這個是主函式執行緒--"+i); if (i==900){
//呼叫方法改變標誌位讓執行緒停止 testStop.stop1(); } } } }
網路延時模擬倒計時(sleep)
每個物件都有一把鎖,sleep不會釋放鎖
//模擬倒計時 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; } } } }
禮讓執行緒 (yield)
//測試禮讓執行緒 //禮讓不一定成功,看cpu心情 public class TestYield { public static void main(String[] args) { MyYield my = new MyYield(); new Thread(my,"a").start(); new Thread(my,"b").start(); } } class MyYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"執行緒開始"); Thread.yield();//執行緒禮讓 System.out.println(Thread.currentThread().getName()+"執行緒結束"); } }