1. 程式人生 > 實用技巧 >java 多執行緒介紹

java 多執行緒介紹

1.執行緒和程序的概念

1.1什麼是程序?程序是執行緒的集合,是正在執行的程式,一個程序裡面至少有一個執行緒。

1.2什麼是執行緒?正在獨立執行的一條路徑。

1.3什麼是多執行緒:就是一個程序裡面同時有多個執行緒執行,多執行緒是為了提高程式效率。

2.建立執行緒

2.1繼承Thread 類

package com.imti;

/**
* 第一步:建立一個類繼承Thread 類
* 第二步:實現run 介面
* 第三步:在main方法裡面 建立子類的物件
* 第四步:呼叫start 方法,啟動執行緒
*/
class CreateThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("i:" + i);

}

}

}


public class ThreadDemo {


public static void main(String[] args) {
CreateThread createThread = new CreateThread();
createThread.start();

for (int i = 0; i < 5; i++) {
System.out.println("main i" + i);
}

}

}

2.2實現Runable介面

package com.imti;

/**
* 第一步:寫一個類實現Runnable介面
* 第二步:重寫介面的run方法
* 第三步: 在main方法裡面 建立子類的物件
* 第四步:建立Thread的類,將子類物件作為引數放到Thread類的建構函式裡面
* 第五步:呼叫Thread的start方法 啟動執行緒
*/

class CreateRunnble implements Runnable {


@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("子執行緒 run,i" + i);
}
}
}

public class RunnbleDemo {
public static void main(String[] args) {
CreateRunnble createRunnble = new CreateRunnble();
Thread thread = new Thread(createRunnble);
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("主執行緒:" + i);
}
}
}

實現 Runnable 介面 要比繼承 Thread 類好點,因為java是面向介面程式設計的


2.3 使用匿名內部類建立執行緒
package com.imti;


abstract class Insidedemo {

public abstract void test();

}


public class AnonymousDemo {
public static void main(String[] args) {

Insidedemo insidedemo = new Insidedemo() {
@Override
public void test() {
System.out.println("使用自定義內部類");

}
};
insidedemo.test();

}
}



3.多執行緒的執行狀態
1.新建
2.準備
3.執行
4.休眠
5.停止

4.join方法 的使用
4.1  join就是讓出當前正在執行的執行緒,讓呼叫join方法的執行緒先執行完畢,在執行其他執行緒:如下程式碼 在主執行緒裡面呼叫thread 執行緒的join方法,就會先執行thread 執行緒的for迴圈
package com.imti;

/**
* 第一步:建立一個類
* 第二步:建立一個匿名內部類的執行緒呼叫Runnable介面
* 第三步:在run 方法裡面寫一個for迴圈
* 第四步: 在主執行緒裡面寫一個for 迴圈
* 第五步:呼叫子執行緒的start 方法,啟動執行緒
* 第六步:在主執行緒裡面先呼叫子執行緒的 start方法()在呼叫子執行緒的join ()方法,等待子執行緒執行完畢主執行緒在執行
*/
public class ThreadDemo01 {

public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {

@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("子執行緒執行:" + i);
}

}
});

thread.start();
thread.join();


for (int i = 0; i < 5; i++) {
System.out.println("主執行緒執行:" + i);
}

}
}