java几种多线程_Java多线程实现的几种方式
Java多線程實現的幾種方式
多進程是計算機中的一個重要概念,通常一個任務稱為一個進程,比如瀏覽網頁、播放音樂都是一個進程。
在進程內部可能還需要執行多個子任務,比如在使用word文檔打字的時候,不僅要進行字符打印,同時還要進行字符統計、拼接檢查等任務。
進程和線程的關系是:一個進程可以包含一個或者多個線程,但至少會包含一個線程。
在Java中,多線程的學習是非常重要的,本文主要概括Java多線程實現的幾種方式。
Java中實現多進程的方式大概有3種:
實現Runnable接口,重寫run方法
繼承Thread類,重寫run方法(Thread類本身也實現了Runnable接口)
實現Callable接口,重寫call方法(帶有返回值)
通過Runnable接口實現多線程1
2
3
4
5
6
7
8
9
10
11
12
13public class Main{
public static void main(String[] args){
Thread t = new Thread(new MyRunnable());
t.start(); // 啟動新線程
}
}
class MyRunnable implements Runnable{
@Override
public void run(){
System.out.println("start new thread!");
}
}
實現Runnable接口的類,只定義了任務,自身不具有線程能力。需要通過Thread類的構造器來將任務驅動在一個線程中。
通過繼承Thread類實現
Thread類中已經實現了Runnable接口,所以可以直接繼承Thread類,覆寫run方法實現多線程
1
2
3
4
5
6
7
8
9
10public class MyThread extends Thread{
public void run(){
System.out.println("New Thread : "+Thread.currentThread().getName());
}
public static void main (String []args){
MyThread thread = new MyThread();
thread.start();
System.out.println("Main Thread : " + Thread.currentThread().getName());
}
}
通過繼承Callable接口實現
相較于實現Runnable接口,Callable方法可以有返回值,并且可以拋出異常
執行Callable方法,需要FutureTask實現類的支持,用于接受運算的結果,FutureTask是Future接口的實現
需要覆寫call方法,運行Callable任務可以拿到一個Future對象,Future表示異步計算的結果
通過Future對象可了解任務執行情況,可取消任務的執行,還可以獲取任務執行的結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class TestCallable{
public static void main(String[] args){
ThreadDemo td = new ThreadDemo();
FutureTask result = new FutureTask<>(td);
new Thread(result).start();
try {
Integer sum = result.get();
System.out.println(sum);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
class ThreadDemo implements Callable{
@Override
public Integer call() throws Exception{
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
}
return sum;
}
}
總結
以上是生活随笔為你收集整理的java几种多线程_Java多线程实现的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET 2.0中怎么为GridV
- 下一篇: java美元兑换,(Java实现) 美元