1. 程式人生 > 其它 >第四章 面向物件(上)3-類的結構之二:-3.5 java的值傳遞機制

第四章 面向物件(上)3-類的結構之二:-3.5 java的值傳遞機制

執行緒一共有五大狀態

 1.建立狀態  new

 2.就緒狀態 呼叫start()方法

 3.執行狀態 獲取cpu資源

 4.阻塞狀態 執行緒休眠

 5.死亡狀態 執行緒執行完畢

停止執行緒

//測試停止執行緒
//1.建議執行緒正常停止-->利用冊數,不建議死迴圈
//2.建議使用標誌位-->設定一個標誌位
//3.不要使用stop或者destroy等過時或者JDK不建議使用的方法

public class TestStop implements Runnable{

    //設定標誌位
    private boolean flag =true;

    @Override
    
public 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()+"執行緒結束");
    }
}