java 實現(xiàn)多線程的方法總結
java 實現(xiàn)多線程的三種方法
在java中,有三種方法可以實現(xiàn)多線程。第一種方法:繼承Thread類,重寫run函數(shù)。第二種方法:實現(xiàn)Runnable接口,重寫run函數(shù)。第三種方法:實現(xiàn)Callable接口,重寫call函數(shù)。本文章將通過實例講解這三種方法如何實現(xiàn)多線程。需要的可以參考一下。
(1)繼承Thread類,重寫run函數(shù)。
class xx extends Thread{
public void run(){
Thread.sleep(1000) //線程休眠1000毫秒,sleep使線程進入Block狀態(tài),并釋放資源
}}
開啟線程:
對象.start() //啟動線程,run函數(shù)運行
(2)實現(xiàn)Runnable接口,代碼如下
class MyThread implements Runnable {
private String name;
public MyThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
for(int i = 0 ; i < 200; i++) {
System.out.println("Thread"+name+"--->"+i);
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread a = new MyThread("a");
MyThread b = new MyThread("b");
MyThread c = new MyThread("c");
new Thread(a).start();
new Thread(b).start();
new Thread(c).start();
}
}
(3)實現(xiàn)Callable接口,重寫call函數(shù)
Callable是類似于Runnable的接口,實現(xiàn)Callable接口的類和實現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務。
Callable和Runnable有幾點不同:
- Callable規(guī)定的方法是call(),而Runnable規(guī)定的方法是run().
- Callable的任務執(zhí)行后可返回值,而Runnable的任務是不能返回值的
- call()方法可拋出異常,而run()方法是不能拋出異常的。
- 運行Callable任務可拿到一個Future對象,F(xiàn)uture表示異步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,并檢索計算的結果.通過Future對象可了解任務執(zhí)行情況,可取消任務的執(zhí)行,還可獲取任務執(zhí)行的結果
Java Callable 代碼示例:
class TaskWithResult implements Callable<String> {
private int id;
public TaskWithResult(int id) {
this.id = id;
}
@Override
public String call() throws Exception {
return "result of TaskWithResult " + id;
}
}
public class CallableTest {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<Future<String>>(); //Future 相當于是用來存放Executor執(zhí)行的結果的一種容器
for (int i = 0; i < 10; i++) {
results.add(exec.submit(new TaskWithResult(i)));
}
for (Future<String> fs : results) {
if (fs.isDone()) {
System.out.println(fs.get());
} else {
System.out.println("Future result is not yet complete");
}
}
exec.shutdown();
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 詳解java裝飾模式(Decorator Pattern)
- Java設計模式之裝飾模式(Decorator模式)介紹
- java設計模式之裝飾模式詳細介紹
- JavaScript對象創(chuàng)建模式實例匯總
- 淺談java 增強型的for循環(huán) for each
- Java反射之靜態(tài)加載和動態(tài)加載的簡單實例
- Java從控制臺讀入數(shù)據(jù)的幾種方法總結
- Java中關于控制臺讀取數(shù)字或字符串的方法
- 淺談Java的String中的subString()方法
- 淺析Java中comparator接口與Comparable接口的區(qū)別
- java 裝飾模式(Decorator Pattern)詳解及實例代碼
相關文章
spring boot實現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結
最近在使用spring boot搭建網站的過程之中遇到了有點小問題,最終解決方案是在main目錄下新建了一個webapp文件夾,并且對其路徑進行了配置,本文重點給大家介紹spring boot實現(xiàn)上傳圖片并在頁面上顯示功能,需要的朋友參考下吧2017-12-12
Java實現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)
這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)以及速度的對比,感興趣的可以了解一下2022-07-07
Mybatis Plus 增刪改查的實現(xiàn)(小白教程)
本文主要介紹了Mybatis Plus 增刪改查,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

