1. 程式人生 > >第一章 Java多執行緒技能

第一章 Java多執行緒技能

一個程序正在執行時至少會有1個執行緒正在執行。
public class Test {

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
    }

}
輸出結果:
main
分析:
    一個名稱叫做main的執行緒在執行main()方法中的程式碼。
    執行緒是一個子任務,cpu是以隨機的時間來呼叫執行緒中的run方法。程式碼的執行結果與程式碼執行順序或呼叫的順序無關。
public class MyThread extends
Thread {
private int count=5; @Override synchronized public void run() { super.run(); count--; System.out.println("由"+this.currentThread().getName()+" 計算,count="+count); } } 分析:通過在run方法前加入synchronized關鍵字,使多個執行緒在執行run方法時以排隊的方法進行處理。當一個現在在呼叫run前,先判斷run方法有沒有被上鎖,如果上鎖,說明有其他執行緒正在呼叫run方法,必須等其他執行緒對run方法呼叫結束後才可以執行run方法。synchronized
可以在任意物件及方法上加鎖,而加鎖的這段程式碼稱為“互斥區”或“臨界區”。
currentThread()方法可返回該程式碼段是正在被哪個執行緒呼叫。

package mythread;
public class MyThread extends Thread {

    public MyThread() {
        System.out.println("構造方法的列印:" + Thread.currentThread().getName());
    }

    @Override
    public void run() {
        System.out.println("run方法的列印:"
+ Thread.currentThread().getName()); } } package run; import mythread.MyThread; public class Run2 { public static void main(String[] args) { MyThread mythread = new MyThread(); mythread.start(); } } 輸出結果: 構造方法的列印:main run方法的列印:Thread-0 ---------- package run; import mythread.MyThread; public class Run2 { public static void main(String[] args) { MyThread mythread = new MyThread(); mythread.run(); } } 輸出結果: 構造方法的列印:main run方法的列印:main
    isAlive()的功能判斷當前的程序是否處於活動狀態
    sleep()的作用是在指定的毫秒數讓當前“正在執行的執行緒”休眠,即暫停執行。這個“正在執行的執行緒”是指this.currentThread()返回的執行緒
    getId()方法的作用是取得執行緒的唯一標識
interrupt()方法停止執行緒
this.interrupted()//測試當前執行緒是否已經中斷,執行後具有將狀態標誌設定為false
this.isInterrupted()//測試執行緒是否已經中斷,執行後不清除狀態標誌
使用return停止執行緒

package extthread;
public class MyThread extends Thread {

    @Override
    public void run() {
            while (true) {
                if (this.isInterrupted()) {
                    System.out.println("停止了!");
                    return;//停止執行緒
                }
                System.out.println("timer=" + System.currentTimeMillis());
            }
    }

}

package test.run;
import extthread.MyThread;
public class Run {

    public static void main(String[] args) throws InterruptedException {
        MyThread t=new MyThread();
        t.start();
        Thread.sleep(4000);//使main執行緒休眠4秒
        t.interrupt();//暫停執行緒
    }
}
yield()方法的作用是放棄當前的CPU資源,將它讓給其他的任務佔用CPU,但放棄的時間不確定。