多線程的實現
多線程的實現
(一)基本概念
①程序:一個指令的集合;
②進程:正在執行中的程序;(資源分配的單位)
③線程:進程中的一個執行路徑。(調度和執行的單位)
(註:一個進程中必須存在主線程,主線程運行的代碼存在main方法中)
(二)Thread類
①Thread(Runnable target, String name)構造方法:分配新的 Thread 對象。
②currentThread方法:返回對當前正在執行的線程對象的引用。
③getName方法:返回該線程的名稱。
④getState方法:返回該線程的狀態。
返回值: NEW——新生狀態; RUNNABLE——運行狀態; BLOCKED——阻塞狀態; WAITING——等待喚醒;
TIMED_WAITING——等待指定時間長度; TERMINATED——死亡狀態。
⑤getPriority方法:返回線程的優先級。
⑥setPriority(int newPriority):更改線程的優先級(優先級設定在1~10之間,默認值為5)。
⑦isAlive方法:測試線程是否處於活動狀態。
返回值:線程處於活動狀態——true;否則——false。
⑧join方法:等待該線程終止(該線程強制執行,其它線程處於阻塞狀態)。
⑨sleep(long millis)方法:在指定的毫秒數內讓當前正在執行的線程休眠,線程處於阻塞狀態。
⑩yield方法:暫停當前線程對象執行一次,該線程返回就緒狀態。
(三)多線程的實現1——繼承Thread類
①繼承Thread類;
②重寫run方法,將要執行的代碼寫入run方法中;
③創建線程對象,調用start方法啟動線程。
public class Test {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
for (int i = 0; i < 100; i++) {
System.out.println("Main" + i);
}
}
}
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("MyThread"+i);
}
}
}
(四)多線程的實現2——實現Runnable接口
①創建Thread類,實現Runnable接口;
②實現run方法;
③創建一個實現Runnable接口的類的對象,用該對象來構造Thread對象;
④調用start方法啟動線程。
public class Test {
public static void main(String[] args) {
MyThread02 mt = new MyThread02();
Thread th = new Thread(mt);
th.start();
for (int i = 0; i < 100; i++) {
System.out.println("Main" + i);
}
}
}
public class MyThread02 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("MyThread"+i);
}
}
}
(五)多線程的實現3——實現Callable接口
①創建Thread類,實現Callable接口;
②創建一個實現Callable接口的類的對象
③創建一個FutureTask類的對象,用該對象來構造Thread對象;
④調用start方法啟動線程。
public class Test { public static void main(String[] args) {
Callable<T> oneCallable = new SomeCallable<T>();
FutureTask<T> oneTask = new FutureTask<T>(oneCallable);
Thread oneThread = new Thread(oneTask);
oneThread.start();
}
}
public interface Callable<T> { T call() throws Exception; }
public class SomeCallable<T> extends OtherClass implements Callable<T> {
@Override
public T call() throws Exception {
return null;
}
}
(六)線程的狀態
①新生狀態:無資源、無資格;
②就緒狀態:有資格、無資源;
③運行狀態:有資源、有資格;
④阻塞狀態:無資格、讓資源;
⑤死亡狀態:線程結束。
(七)線程的運行過程
過程①:調用start方法,進入就緒狀態;
過程②:CPU調度該線程,進入運行狀態;
過程③:run方法執行完畢、線程被強制結束或拋出未捕獲異常;
過程④:發生導致線程阻塞的事件;
過程⑤:阻塞的事件結束,重新進入就緒狀態;
過程⑥:CPU片段時間到,線程未執行完畢,返回就緒狀態。
———————————————————————————————————————————————————————————————————
The end @ 萬有引力+
-
-
-
-
-
多線程的實現