Java實現多執行緒的三種方式
講給Android程式設計師看的前端系列教程(40集免費視訊教程+原始碼)
版權宣告
- 本文原創作者:谷哥的小弟
- 作者部落格地址:http://blog.csdn.net/lfdfhl
概述
在Java中可通過三種方式來實現多執行緒:
- 1、繼承Thread類,重寫run( )方法
- 2、實現Runnable介面,重寫run( )方法
- 3、實現Callable介面,重寫call( )方法並使用FutureTask獲取call( )方法的返回結果
利用Thread類實現多執行緒
主要步驟
- 1、通過繼承Thread建立執行緒的子類
- 2、重寫Thread類的run( )方法
- 3、建立子類例項物件
- 4、呼叫子類例項物件start( )方法啟動執行緒
使用示例
package com.thread1;
/**
* 本文作者:谷哥的小弟
* 部落格地址:http://blog.csdn.net/lfdfhl
*/
public class ThreadCreate1 {
public static void main(String[] args) {
//建立第一個子執行緒
MyThread firstThread=new MyThread();
firstThread.start();
String firstThreadName = firstThread.getName();
System.out.println("firstThreadName="+firstThreadName);
//建立第二個子執行緒
MyThread secondThread=new MyThread();
secondThread.start();
String secondThreadName = secondThread.getName();
System.out.println("secondThreadName="+secondThreadName);
}
}
//MyThread繼承Thread類
class MyThread extends Thread{
@Override
public void run() {
super.run();
String threadName = Thread.currentThread().getName();
for(int i=0;i<5;i++) {
System.out.println(threadName+",i="+i);
}
}
}
執行結果
利用Runnable介面實現多執行緒
主要步驟
- 1、建立Runnable介面實現類並重寫該介面的run( )方法
- 2、建立Runnable介面實現類物件
- 3、利用Thread有參建構函式
public Thread(Runnable target)
和Runnable介面實現類物件建立執行緒例項 - 4、呼叫執行緒例項的start( )方法啟動執行緒
使用示例
package com.thread1;
/**
* 本文作者:谷哥的小弟
* 部落格地址:http://blog.csdn.net/lfdfhl
*/
public class ThreadCreate2 {
public static void main(String[] args) {
// 建立第一個子執行緒
MyRunnable firstMyRunnable=new MyRunnable();
Thread firstThread = new Thread(firstMyRunnable);
firstThread.start();
String firstThreadName = firstThread.getName();
System.out.println("firstThreadName=" + firstThreadName);
// 建立第二個子執行緒
MyRunnable secondMyRunnable=new MyRunnable();
Thread secondThread = new Thread(secondMyRunnable);
secondThread.start();
String secondThreadName = secondThread.getName();
System.out.println("secondThreadName=" + secondThreadName);
}
}
//MyRunnable實現Runnable介面
class MyRunnable implements Runnable {
@Override
public void run() {
String threadName = Thread.currentThread().getName();
for (int i = 0; i < 5; i++) {
System.out.println(threadName + ",i=" + i);
}
}
}
執行結果
利用Callable介面實現多執行緒
主要步驟
- 1、建立Callable介面實現類並重寫該介面的call( )方法
- 2、建立Callable介面實現類物件
- 3、使用Runnable子類FutureTask的有參建構函式
public FutureTask(Callable< V > callable)
和Callable介面實現類物件建立FutureTask例項 - 4、利用Thread有參建構函式
public Thread(Runnable target)
和FutureTask例項建立執行緒例項 - 5、呼叫執行緒例項的start( )方法啟動執行緒
- 6、利用FutureTask的get( )方法獲取子執行緒執行結果
使用示例
package com.thread1;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 本文作者:谷哥的小弟
* 部落格地址:http://blog.csdn.net/lfdfhl
*/
public class ThreadCreate3 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 建立第一個子執行緒
MyCallable firstMyCallable = new MyCallable();
FutureTask<Object> firstFutureTask = new FutureTask<>(firstMyCallable);
Thread firstThread = new Thread(firstFutureTask);
firstThread.start();
String firstThreadName = firstThread.getName();
System.out.println("firstThreadName=" + firstThreadName);
// 獲取第一個子執行緒返回的結果
Object firstThreadResult = firstFutureTask.get();
System.out.println("firstThreadResult=" + firstThreadResult);
// 建立第二個子執行緒
MyCallable secondMyCallable = new MyCallable();
FutureTask<Object> secondFutureTask = new FutureTask<>(secondMyCallable);
Thread secondThread = new Thread(secondFutureTask);
secondThread.start();
String secondThreadName = secondThread.getName();
System.out.println("secondThreadName=" + secondThreadName);
// 獲取第二個子執行緒返回的結果
Object secondThreadResult = secondFutureTask.get();
System.out.println("secondThreadResult=" + secondThreadResult);
}
}
// MyCallable實現Callable介面
class MyCallable implements Callable<Object> {
@Override
public Object call() throws Exception {
String threadName = Thread.currentThread().getName();
int i = 0;
while (i < 5) {
System.out.println(threadName + ",i=" + i);
i++;
}
return i;
}
}
執行結果
總結
為避免Java單繼承帶來的侷限性,在實際開發中多采用實現Runnable介面或實現Callable介面的方式實現多執行緒。
相關文章
- Java多執行緒【三種實現方法】Java執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- Java多執行緒實現方式Java執行緒
- java執行緒實現的三種方式以及靜態代理Java執行緒
- 多執行緒的三種實現方式及靜態代理模式執行緒模式
- Java之實現多執行緒的方式三:實現Callable介面(結合執行緒池使用)Java執行緒
- 關於多執行緒的兩種實現方式執行緒
- Java建立多執行緒的四種方式Java執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- java執行緒實現方式Java執行緒
- 面試-實現多執行緒的方式面試執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- Java之實現多執行緒的方式二:實現Runnable介面Java執行緒
- Java多執行緒的實現Java執行緒
- 建立執行緒的三種方式執行緒
- Java中實現執行緒的方式Java執行緒
- 【Python】python 多執行緒兩種實現方式Python執行緒
- Java併發(三)----建立執行緒的三種方式及檢視程式執行緒Java執行緒
- 多執行緒-匿名內部類的方式實現多執行緒程式執行緒
- Java基礎:執行緒的三種建立方式Java執行緒
- Java併發和多執行緒2:3種方式實現陣列求和Java執行緒陣列
- 多執行緒-多執行緒方式1的程式碼實現執行緒
- Java多執行緒之—Synchronized方式和CAS方式實現執行緒安全效能對比Java執行緒synchronized
- java實現多執行緒的方法Java執行緒
- Java多執行緒的實現方法Java執行緒
- 多執行緒程式設計1-定義理解與三種實現方式執行緒程式設計
- Map實現執行緒安全的3種方式執行緒
- java執行緒建立的兩種方式Java執行緒
- 3種方式實現python多執行緒併發處理Python執行緒
- JAVA多執行緒下載的實現Java執行緒
- 多執行緒-多執行緒方式2的思路及程式碼實現執行緒
- Java面試之Java中實現多執行緒有幾種方法Java面試執行緒
- Java中多執行緒的概述、實現方式、執行緒控制、生命週期、多執行緒程式練習、安全問題的解決...Java執行緒
- Java多執行緒(三):SynchronizedJava執行緒synchronized
- Java之實現多執行緒的方式一 :繼承Thread類Java執行緒繼承thread
- 多執行緒-多執行緒方式3的思路及程式碼實現:方式3依賴於執行緒池存在的執行緒
- 建立執行緒的方式三:實現Callable介面執行緒