Java基礎中的 線程
創建線程的方式:
1. 繼承Thread類
(1)定義類,繼承Thread
(2)復寫Thread類中的void run()方法(因為Thread類用於描述線程,該類就定義了一個功能,用於存儲線程要運行的代碼。該存儲功能就是run方法。)
(3)調用線程的start方法,該方法能啟動線程,並能調用run方法
註:對象.run()僅僅是對象調用方法。而線程創建了,並沒有運行;
對象.start()開啟線程並執行該線程的run方法
2. 實現Runnable接口
(1)定義類,實現Runnable接口
(2)覆蓋Runnable接口中的run方法。將線程要運行的代碼存放在該run方法中
(3)通過Thread類建立線程對象
(4)將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造函數。因為,自定義的run方法所屬的對象是Runnable接口的子類對象,所以要讓線程去執行指定對象的run方法,就必須明確該run方法所屬的對象。
(5)調用Thread類的start方法開啟線程,並調用Runnable接口子類的run方法
實現方式與繼承方式的區別:
實現方式好處:避免了單繼承的局限性。在定義線程時,建議使用實現方式。
繼承Thread:線程代碼存放在Thread子類run方法中;實現Runnable:線程代碼存放在接口的子類的run方法。
繼承Thread類的例子
public class TestThread2 { public static void main(String[] args) { MyThread2 mt = new MyThread2(); mt.start(); for (int i = 0; i < 50; i++) { System.out.println("TestThread-----------" + i); } } } class MyThread2 extends Thread{public void run() { for (int i = 0; i < 50; i++) { System.out.println("MyThread=========" + i); } } }
實現Runnable接口的例子:
public class TestThread { public static void main(String[] args) { MyThread mt = new MyThread(); Thread t = new Thread(mt); t.start(); // mt.run(); for (int i = 0; i < 50; i++) { System.out.println("TestThread-----------" + i); } } } class MyThread implements Runnable { public void run() { for (int i = 0; i < 50; i++) { System.out.println("MyThread=========" + i); } } }
3.線程的方法:
Join方法:線程對象.join(),當A線程執行到了B線程的.join()方法,A就會等待。等B線程都執行完,A才會執行。join可以用來臨時加入線程執行。
yield方法:暫停當前正在執行的線程對象,並執行其他線程。
static Thread currentThread():獲取當前線程對象
getName():獲取線程名稱
設置線程名稱:setName()或者構造函數
Java基礎中的 線程