執行緒第四課——執行緒常用方法
阿新 • • 發佈:2018-11-28
這節課我們來講講執行緒常用的方法,還是看API文件加寫程式碼演示:
以下是Thread類的常用方法
以下是Object類中和執行緒有關的方法:
Demo:
public class ThreadMethodTeach { public static void main(String[] args) throws InterruptedException { /** * Thread.getName()方法不允許重寫,因為返回值型別為final * 注意: * 如果在一個類宣告前加final,則這個類無法被繼承,比如java.lang.String * 如果一個方法的返回值型別加上final,則這個方法不可以被重寫 */ /** * Thread.getName() 獲取執行緒的名稱 * Thread.getPriority() 獲取執行緒的優先順序 * Thread.join() 停止運行當前正在執行的執行緒(稱為執行緒1吧),將CPU資源讓給呼叫join()方法的執行緒(稱為執行緒2吧), * 待執行緒2執行完進入停止狀態後繼續執行執行緒1 * Thread.yield() 本執行緒讓出CPU資源,進入就緒狀態 * Object.wait() 這個wait()方法是讓當前正在執行的執行緒進入等待狀態,且本物件監視這個執行緒 * Object.notify() 喚醒此物件監視器上等待的單個執行緒,使這個執行緒進入就緒狀態 * Object.notifyAll() 喚醒所有處於等待狀態的執行緒,使其進入就緒狀態 * Thread.getState() 獲取執行緒當前的狀態 */ /** * 說下執行緒的狀態: * 1. NEW 新建 * 2. RUNNABLE 執行 * 3. BLOCKED 就緒 * 4. WAITING 等待 * 5. TIME_WAITING 等待(一定時間後就會自動被喚醒) * 6. TERMINATED 停止 * * 可以看到和我們上節課所教的狀態是一一對應的(TIME_WAITING也是等待,只不過是一種特殊的等待) */ //來試試 MyThread1 myThread1 = new MyThread1("執行緒1"); MyThread1 myThread2 = new MyThread1("執行緒2"); //在啟動前讓他們可以獲取對方的狀態 myThread1.setOtherThread(myThread2); myThread2.setOtherThread(myThread1); //來看看啟動前的狀態 System.out.println(myThread1.getName() + "的狀態是" + myThread1.getState()); System.out.println(myThread2.getName() + "的狀態是" + myThread2.getState()); myThread1.start(); myThread2.start(); //等待狀態下節課講吧。。我再去看看。。 } } class MyThread1 extends Thread{ //本屬性決定當前執行緒是否停止執行,當其為false時,停止執行 //這種停止執行緒執行的方法時jdk推薦的,因為stop()方法過時了 private boolean flag = true; private Thread otherThread = null; int i; public MyThread1() { super(); } public MyThread1(Runnable target) { super(target); } public MyThread1(String name) { super(name); } /** * @return 返回該執行緒的Id,執行緒Id是自動生成的,且唯一 */ @Override public long getId() { return super.getId(); } //改下run方法 @Override public void run() { while(flag) { System.out.println("我是" + getName() + ",我的狀態為" + getState()); System.out.println("另一個執行緒是" + otherThread.getName() + ",他的狀態為" + otherThread.getState()); i++; if (i == 10) { stopThread();//給個結束條件 } //讓出資源 // yield(); } } public void stopThread() { flag = false; } public Thread getOtherThread() { return otherThread; } public void setOtherThread(Thread otherThread) { this.otherThread = otherThread; } }