1. 程式人生 > >Java學習之多執行緒、內部類

Java學習之多執行緒、內部類

內部類:

    定義在類中的類,成為內部類。

    好處是可以直接訪問外部類中的成員(包括私有)。

    外部類想訪問內部類需要建立內部類物件。

    匿名內部類:就是內部類的簡化格式。

        內部類必須繼承一個類或者實現介面,這種情況下的內部類可以簡化成匿名內部類。

    格式: new 父類或者介面 () {定義子類的內容}

    匿名內部類就是一個子類物件。

多執行緒

    執行緒和程序:

        程序:一個正在執行的程式就是一個程序。

        執行緒:一個程序中有很多個執行緒。(每一個執行緒相當於一個執行的任務)

    開啟一個執行緒 相當於開啟了一個CPU的執行路徑(相對獨立)。

    CPU在執行多個執行緒的時候是隨機的,跟執行緒的優先順序有關。執行緒的排程採用分時排程,CPU會在多個執行緒中進行隨機切換,優先順序相同,時間片相同。

    單執行緒程式:

        特點:程式由上至下依次執行。(一個執行完,才會執行下一個)

        好處:資料絕對安全,不牽扯到操作共享資料。

        弊端:效率不高。

    主執行緒

        多執行緒的程式,除了主執行緒外,一般都叫子執行緒。

        一個程式只有一個主執行緒。

        main函式就是一個執行緒,並且是主執行緒。

        主執行緒(main函式)是如何被執行的

            JVM呼叫main函式 --> CPU為main函式開闢了一個執行路徑 --> 相當於在這個執行路徑中,執行main函式中的程式碼。

        Thread執行緒類(開闢一個主執行緒以外的子執行緒)

            1.建立Thread類的子類;

            2.重寫run方法(run方法中是執行緒要執行的程式碼);

            3.呼叫start方法,開啟執行緒(執行緒不能重複開啟)。

        執行緒的建立:

           方式1:

class MyThread extends Thread{
	public MyThread() {
	}
	
	public MyThread(String name) {
		super(name);
	}
	@Override
	public void run() {
		
	}
	
}

        繼承Thread類,後在main函式中宣告子類的物件。

        方式2:使用介面的方式來建立

class RunnableImpl implements Runnable{
	
	@Override
	public void run() {
		
	}
	
}
     RunnableImpl runnableImpl = new RunnableImpl();
     // 建立一個執行緒類物件
     Thread thread = new Thread(runnableImpl);
     // 開啟執行緒
     thread.start();

        方式3:用Thread的匿名內部類

    Thread thread = new Thread() {
	public void run() {
		System.out.println("子執行緒執行的方法");
	};
    };
		
    thread.start();

        方式4:用Runnable介面的匿名內部類

Runnable runnable = new Runnable() {
			
    @Override
    public void run() {
        System.out.println("介面實現類的方法");
    }
};
Thread thread2 = new Thread(runnable); 
thread2.start();

    執行緒名稱的獲取

    在一般的執行緒中,名稱可以通過get方法獲取。但是主執行緒無法通過此方法獲取,所以獲取名稱一般使用:

    Thread.currentThread();方法,此方法可以獲取當前正在執行的執行緒。

    注意:由於Thread類中的set/get方法是由final修飾的,當想給Thread子類新增成員變數時,需注意提供set/get方法時,需要改名。

    建立了一個執行緒,相當於CPU開闢了一個獨立的執行路徑。相當於開闢了一個獨立的方法棧來專門執行子執行緒中的方法。

    執行緒在記憶體中的表現圖:


    執行緒狀態(6種)