Java 建立多執行緒
阿新 • • 發佈:2018-10-31
1、繼承java.lang.Thread方式
執行start方法:MyThread的run就會被執行
程式碼片段:
import java.util.Scanner; public class Main { public static void main(String[] args){ MyThread myThread = new MyThread(); myThread.start(); System.out.println("我的多執行緒測試!"); } } class MyThread extends Thread{ public void run(){ Scanner scanner = new Scanner(System.in); System.out.println("輸入一條書本書目:"); String bookName = scanner.next(); System.out.println(bookName); } }
顯示結果:
我的多執行緒測試!
輸入一條書本書目:Java應用教程
Java應用教程
2、獲取子執行緒的id和name
程式碼片段:
public class Main { public static void main(String[] args){ MyThread myThread = new MyThread(); myThread.start(); System.out.println("我的多執行緒測試!"); } } class MyThread extends Thread{ public void run(){ String name = Thread.currentThread().getName(); long id = Thread.currentThread().getId(); System.out.println("子執行緒的name:"+name); System.out.println("子執行緒的id:"+id); } }
顯示結果:
我的多執行緒測試!
子執行緒的name:Thread-0
子執行緒的id:8
3、多執行緒的執行順序隨機(cpu分配)
程式碼片段:
public class Main { public static void main(String[] args){ MyThread myThread = new MyThread(); MyThread myThread2 = new MyThread(); MyThread myThread3 = new MyThread(); myThread.start(); myThread2.start(); myThread3.start(); System.out.println("我的多執行緒測試!"); } } class MyThread extends Thread{ public void run(){ String name = Thread.currentThread().getName(); long id = Thread.currentThread().getId(); System.out.println("子執行緒的name:"+name); System.out.println("子執行緒的id:"+id); } } class MyThread2 extends Thread{ public void run(){ String name = Thread.currentThread().getName(); long id = Thread.currentThread().getId(); System.out.println("子執行緒的name:"+name); System.out.println("子執行緒的id:"+id); } } class MyThread3 extends Thread{ public void run(){ String name = Thread.currentThread().getName(); long id = Thread.currentThread().getId(); System.out.println("子執行緒的name:"+name); System.out.println("子執行緒的id:"+id); } }
顯示結果:
子執行緒的name:Thread-2
子執行緒的id:10
子執行緒的name:Thread-1
子執行緒的name:Thread-0
子執行緒的id:9
子執行緒的id:8
4、實現java.lang.Runnable介面
程式碼片段:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Runnable runnable = new Runnable() {
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("輸入書名:");
String bookName = scanner.next();
System.out.println("書名:"+ bookName);
}
};
new Thread(runnable).start();
System.out.println("多執行緒runnable測試");
}
}
顯示結果:
多執行緒runnable測試
輸入書名:Java應用教程
書名:Java應用教程
5、使用Callable+FutureTask獲取執行結果建立多執行緒
task.get()
是阻塞式的方法,直到call()
返回結果
程式碼片段:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException{
FutureTask<String> task = new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
return "Java基礎教程";
}
});
new Thread(task).start();
System.out.println(task.get());
System.out.println("Callable+FutureTask獲取執行結果建立多執行緒");
}
}
顯示結果:
Java基礎教程
Callable+FutureTask獲取執行結果建立多執行緒