How to create multiThread in java

public class Thread extends Object implements Runnable

有兩種方法,繼承Thread or 實作Runnable

1.  繼承Thread:

class test1{
public static void main(String[] args){
System.out.println(“Hello”);
aThread thread1 = new aThread();
aThread thread2 = new aThread();

thread1.setName(“thread1”);
thread2.setName(“thread2”);
thread1.start();
thread2.start();
System.out.println(Thread.activeCount());
}
}


class aThread extends Thread{
public void run(){
for(int i=0; i<100; i++){
String threadName = Thread.currentThread().getName();
System.out.println(threadName + “: “ + i);
}
}

}

執行結果:
herongsendeMacBook-Air:160704-multithread RongSonHo$ time java test1
Hello
3
thread2: 0
thread1: 0
thread1: 1
thread2: 1
thread1: 2
thread1: 3
thread2: 2
thread2: 3
thread1: 4
thread2: 4
thread1: 5
thread1: 6
thread1: 7
thread1: 8
thread2: 5
thread1: 9
thread2: 6
thread1: 10
thread2: 7
thread1: 11
thread2: 8
thread1: 12
thread2: 9
thread1: 13
thread2: 10
thread1: 14
thread2: 11
thread1: 15
thread2: 12
thread1: 16
thread2: 13
thread1: 17
thread2: 14
thread1: 18
thread2: 15
thread1: 19
thread2: 16
thread1: 20
thread2: 17
thread1: 21
thread2: 18
thread1: 22
thread2: 19
thread1: 23
thread2: 20
thread1: 24
thread2: 21
thread1: 25
thread2: 22
thread1: 26
thread2: 23
thread1: 27
thread2: 24
thread2: 25
thread1: 28
thread2: 26
thread1: 29
thread2: 27
thread1: 30
thread2: 28
thread1: 31
thread2: 29
thread1: 32
thread1: 33
thread1: 34
thread2: 30
thread1: 35
thread1: 36
thread2: 31
thread2: 32
thread1: 37
thread2: 33
thread1: 38
thread1: 39
thread2: 34
thread1: 40
thread2: 35
thread1: 41
thread2: 36
thread1: 42
thread2: 37
thread1: 43
thread2: 38
thread1: 44
thread2: 39
thread1: 45
thread2: 40
thread1: 46
thread2: 41
thread1: 47
thread2: 42
thread1: 48
thread2: 43
thread1: 49
thread2: 44
thread1: 50
thread2: 45
thread1: 51
thread2: 46
thread1: 52
thread2: 47
thread1: 53
thread2: 48
thread1: 54
thread2: 49
thread1: 55
thread2: 50
thread1: 56
thread2: 51
thread1: 57
thread2: 52
thread1: 58
thread2: 53
thread1: 59
thread1: 60
thread2: 54
thread1: 61
thread2: 55
thread1: 62
thread2: 56
thread1: 63
thread2: 57
thread1: 64
thread2: 58
thread1: 65
thread2: 59
thread2: 60
thread1: 66
thread1: 67
thread2: 61
thread1: 68
thread2: 62
thread1: 69
thread2: 63
thread1: 70
thread2: 64
thread1: 71
thread2: 65
thread1: 72
thread2: 66
thread1: 73
thread2: 67
thread1: 74
thread2: 68
thread1: 75
thread2: 69
thread1: 76
thread2: 70
thread1: 77
thread2: 71
thread1: 78
thread2: 72
thread1: 79
thread2: 73
thread1: 80
thread2: 74
thread1: 81
thread2: 75
thread1: 82
thread1: 83
thread2: 76
thread1: 84
thread2: 77
thread1: 85
thread2: 78
thread2: 79
thread1: 86
thread2: 80
thread1: 87
thread2: 81
thread1: 88
thread2: 82
thread1: 89
thread2: 83
thread1: 90
thread1: 91
thread2: 84
thread2: 85
thread1: 92
thread2: 86
thread2: 87
thread1: 93
thread2: 88
thread1: 94
thread2: 89
thread2: 90
thread1: 95
thread2: 91
thread2: 92
thread1: 96
thread2: 93
thread1: 97
thread2: 94
thread1: 98
thread2: 95
thread1: 99
thread2: 96
thread2: 97
thread2: 98
thread2: 99

real 0m0.647s
user 0m0.164s
sys 0m0.153s

2. 實作Runnable

class test2{
public static void main(String[] args){
System.out.println(“Hello test2”);
bThread thread1 = new bThread();
bThread thread2 = new bThread();
bThread thread3 = new bThread();
bThread thread4 = new bThread();
Thread thread1b = new Thread(thread1, “thread1”);
Thread thread2b = new Thread(thread2, “thread2”);
Thread thread3b = new Thread(thread3, “thread3”);
Thread thread4b = new Thread(thread4, “thread4”);

thread1b.start();
thread2b.start();
thread3b.start();
thread4b.start();
System.out.println(“Thread count: “+ Thread.activeCount());
}
}

class bThread implements Runnable{
public void run(){
for(int i=0; i<100; i++){
String threadName = Thread.currentThread().getName();
System.out.println(threadName+ “: “+ i);
}
}
public bThread(){
System.out.println(“This is bThread!”);
}

}

執行結果:
herongsendeMacBook-Air:160704-multithread RongSonHo$ time java test2
Hello test2
This is bThread!
This is bThread!
This is bThread!
This is bThread!
Thread-1: 0
Thread count: 5
Thread-3: 0
Thread-2: 0
Thread-0: 0
Thread-2: 1
Thread-3: 1
Thread-1: 1
Thread-3: 2
Thread-2: 2
Thread-0: 1
Thread-2: 3
Thread-3: 3
Thread-1: 2
Thread-3: 4
Thread-2: 4
Thread-0: 2
Thread-2: 5
Thread-3: 5
Thread-1: 3
Thread-3: 6
Thread-2: 6
Thread-2: 7
Thread-0: 3
Thread-2: 8
Thread-3: 7
Thread-1: 4
Thread-3: 8
Thread-2: 9
Thread-0: 4
Thread-2: 10
Thread-3: 9
Thread-1: 5
Thread-3: 10
Thread-2: 11
Thread-0: 5
Thread-2: 12
Thread-3: 11
Thread-1: 6
Thread-3: 12
Thread-2: 13
Thread-0: 6
Thread-2: 14
Thread-2: 15
Thread-3: 13
Thread-1: 7
Thread-3: 14
Thread-2: 16
Thread-0: 7
Thread-2: 17
Thread-3: 15
Thread-1: 8
Thread-3: 16
Thread-2: 18
Thread-0: 8
Thread-2: 19
Thread-3: 17
Thread-1: 9
Thread-3: 18
Thread-2: 20
Thread-0: 9
Thread-2: 21
Thread-3: 19
Thread-1: 10
Thread-3: 20
Thread-2: 22
Thread-0: 10
Thread-2: 23
Thread-3: 21
Thread-1: 11
Thread-3: 22
Thread-2: 24
Thread-0: 11
Thread-2: 25
Thread-3: 23
Thread-1: 12
Thread-3: 24
Thread-2: 26
Thread-0: 12
Thread-2: 27
Thread-3: 25
Thread-1: 13
Thread-3: 26
Thread-2: 28
Thread-0: 13
Thread-2: 29
Thread-3: 27
Thread-1: 14
Thread-3: 28
Thread-2: 30
Thread-0: 14
Thread-2: 31
Thread-3: 29
Thread-1: 15
Thread-3: 30
Thread-2: 32
Thread-0: 15
Thread-2: 33
Thread-3: 31
Thread-1: 16
Thread-3: 32
Thread-3: 33
Thread-3: 34
Thread-2: 34
Thread-0: 16
Thread-0: 17
Thread-2: 35
Thread-3: 35
Thread-1: 17
Thread-3: 36
Thread-2: 36
Thread-0: 18
Thread-2: 37
Thread-3: 37
Thread-3: 38
Thread-3: 39
Thread-1: 18
Thread-3: 40
Thread-2: 38
Thread-0: 19
Thread-2: 39
Thread-3: 41
Thread-1: 19
Thread-3: 42
Thread-2: 40
Thread-2: 41
Thread-0: 20
Thread-0: 21
Thread-2: 42
Thread-3: 43
Thread-1: 20
Thread-3: 44
Thread-2: 43
Thread-0: 22
Thread-2: 44
Thread-3: 45
Thread-1: 21
Thread-3: 46
Thread-2: 45
Thread-0: 23
Thread-2: 46
Thread-3: 47
Thread-1: 22
Thread-3: 48
Thread-2: 47
Thread-0: 24
Thread-2: 48
Thread-3: 49
Thread-1: 23
Thread-3: 50
Thread-2: 49
Thread-0: 25
Thread-2: 50
Thread-3: 51
Thread-1: 24
Thread-3: 52
Thread-2: 51
Thread-0: 26
Thread-2: 52
Thread-3: 53
Thread-1: 25
Thread-3: 54
Thread-2: 53
Thread-0: 27
Thread-2: 54
Thread-3: 55
Thread-1: 26
Thread-3: 56
Thread-2: 55
Thread-0: 28
Thread-2: 56
Thread-3: 57
Thread-3: 58
Thread-1: 27
Thread-3: 59
Thread-2: 57
Thread-0: 29
Thread-2: 58
Thread-3: 60
Thread-1: 28
Thread-3: 61
Thread-2: 59
Thread-0: 30
Thread-0: 31
Thread-2: 60
Thread-3: 62
Thread-1: 29
Thread-3: 63
Thread-2: 61
Thread-2: 62
Thread-0: 32
Thread-0: 33
Thread-2: 63
Thread-2: 64
Thread-3: 64
Thread-1: 30
Thread-3: 65
Thread-2: 65
Thread-0: 34
Thread-2: 66
Thread-3: 66
Thread-1: 31
Thread-3: 67
Thread-2: 67
Thread-2: 68
Thread-0: 35
Thread-2: 69
Thread-3: 68
Thread-1: 32
Thread-1: 33
Thread-1: 34
Thread-3: 69
Thread-2: 70
Thread-0: 36
Thread-2: 71
Thread-3: 70
Thread-3: 71
Thread-1: 35
Thread-3: 72
Thread-2: 72
Thread-0: 37
Thread-2: 73
Thread-3: 73
Thread-1: 36
Thread-3: 74
Thread-2: 74
Thread-2: 75
Thread-0: 38
Thread-2: 76
Thread-3: 75
Thread-1: 37
Thread-3: 76
Thread-2: 77
Thread-0: 39
Thread-2: 78
Thread-3: 77
Thread-1: 38
Thread-3: 78
Thread-2: 79
Thread-0: 40
Thread-2: 80
Thread-3: 79
Thread-1: 39
Thread-3: 80
Thread-3: 81
Thread-3: 82
Thread-2: 81
Thread-0: 41
Thread-2: 82
Thread-3: 83
Thread-1: 40
Thread-3: 84
Thread-2: 83
Thread-0: 42
Thread-2: 84
Thread-3: 85
Thread-1: 41
Thread-3: 86
Thread-2: 85
Thread-0: 43
Thread-2: 86
Thread-3: 87
Thread-1: 42
Thread-1: 43
Thread-3: 88
Thread-2: 87
Thread-0: 44
Thread-2: 88
Thread-3: 89
Thread-1: 44
Thread-3: 90
Thread-2: 89
Thread-0: 45
Thread-2: 90
Thread-3: 91
Thread-3: 92
Thread-1: 45
Thread-3: 93
Thread-2: 91
Thread-0: 46
Thread-2: 92
Thread-3: 94
Thread-1: 46
Thread-3: 95
Thread-2: 93
Thread-0: 47
Thread-2: 94
Thread-3: 96
Thread-1: 47
Thread-3: 97
Thread-2: 95
Thread-0: 48
Thread-2: 96
Thread-3: 98
Thread-1: 48
Thread-3: 99
Thread-2: 97
Thread-0: 49
Thread-2: 98
Thread-2: 99
Thread-1: 49
Thread-0: 50
Thread-1: 50
Thread-1: 51
Thread-0: 51
Thread-1: 52
Thread-0: 52
Thread-1: 53
Thread-0: 53
Thread-1: 54
Thread-0: 54
Thread-1: 55
Thread-0: 55
Thread-1: 56
Thread-0: 56
Thread-1: 57
Thread-0: 57
Thread-1: 58
Thread-0: 58
Thread-1: 59
Thread-0: 59
Thread-1: 60
Thread-0: 60
Thread-1: 61
Thread-0: 61
Thread-1: 62
Thread-0: 62
Thread-0: 63
Thread-1: 63
Thread-0: 64
Thread-1: 64
Thread-0: 65
Thread-0: 66
Thread-1: 65
Thread-0: 67
Thread-1: 66
Thread-0: 68
Thread-1: 67
Thread-0: 69
Thread-1: 68
Thread-0: 70
Thread-1: 69
Thread-1: 70
Thread-1: 71
Thread-1: 72
Thread-0: 71
Thread-1: 73
Thread-0: 72
Thread-1: 74
Thread-0: 73
Thread-1: 75
Thread-0: 74
Thread-1: 76
Thread-1: 77
Thread-0: 75
Thread-1: 78
Thread-0: 76
Thread-1: 79
Thread-0: 77
Thread-1: 80
Thread-1: 81
Thread-0: 78
Thread-1: 82
Thread-0: 79
Thread-0: 80
Thread-0: 81
Thread-1: 83
Thread-0: 82
Thread-1: 84
Thread-1: 85
Thread-0: 83
Thread-0: 84
Thread-1: 86
Thread-0: 85
Thread-0: 86
Thread-1: 87
Thread-0: 87
Thread-1: 88
Thread-0: 88
Thread-0: 89
Thread-1: 89
Thread-0: 90
Thread-1: 90
Thread-0: 91
Thread-1: 91
Thread-0: 92
Thread-1: 92
Thread-0: 93
Thread-1: 93
Thread-1: 94
Thread-0: 94
Thread-1: 95
Thread-1: 96
Thread-1: 97
Thread-0: 95
Thread-1: 98
Thread-1: 99
Thread-0: 96
Thread-0: 97
Thread-0: 98
Thread-0: 99

real 0m0.457s
user 0m0.179s
sys 0m0.105s

ps. 預設的Thread Name: Thread-0…

Thread的Constructor:
1. Thread() 分派新的執行緒  -> test1.java
2. Thread(String name)3. Thread(Runnable target) 傳入一個Runnable物件,並分派新的執行緒 -> test2.java
4. Thread(Runnable target, String name) 

常用方法:
1. String getName() 取得名稱
2. int getPriority() 取得優先權
3. void setPriority() 可設參數1~10或MIN_PRIORITY=1、NORM_PRIORITY=5、MAX_PRIORITY=10
4. void start 將執行丟入Runnable pool中,等待系統run()呼叫
5. void run() 開始執行工作(由系統自動呼叫,非程式設計師撰寫)
6. static void yield() 將目前執行緒先行暫停,重新排程,讓與其他執行緒執行
7. static void sleep(long millis) 暫停目前執行緒,需在try-catch中呼叫,會丟出throws InterruptedException
8. void join() / void join(long millis) 用於調整執行緒執行順序,先暫停目前執行緒,而指定其他執行緒加入執行工作,執行完畢後才回復,或可設定執行時間,需在try-catch中呼叫,會丟出throws InterruptedException
9. void stop() 停止正在執行的執行緒 (不建議使用,易造成死結)
10. void suspend() 停止正在執行的執行緒 (不建議使用,易造成死結)
11. void destroy() 毀掉執行緒
12. boolean isAlive() 取得目前執行緒狀態
13. void wait() 讓執行緒進入等待狀態
14. void notify() 喚醒一個等待中的執行緒,若有多個執行緒,則由JVM決定
15. void notifyAll() 喚醒所有等待中的執行緒





參考:
1. MEMO 123: JAVA筆記-Thread 多執行緒基本撰寫範例與常用函式 :http://jhengjyun.blogspot.tw/2011/04/1.html

作者

RongSon

Graduate Student of CCU COMM Game Development, Network Communication, macOS/Ubuntu/Android, Arduino/Raspberry Pi/Intel Edison, Java/Python/C/C++

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *