Java執行緒的建立方式
阿新 • • 發佈:2018-12-18
執行緒建立方式
- 直接繼承Thread
- 實現Runnable介面
- 實現Callable介面
方式一
執行緒的建立
package com.jimory.thread.create;
/**
* 執行緒建立(一)
* 1、繼承Thread類
* 2、重寫run方法 , run方法裡是執行緒體
*
* 執行緒使用
* 1、建立類物件
* 2、呼叫start方法(注意是 物件.start() 不能用物件.run()方法)
*
* 模擬龜兔賽跑
* @author Jimory
*
*/
public class Rabbit extends Thread{
@Override
public void run() {
for(int i=1;i<=100;i++){
System.out.println("兔子跑了"+i+"步");
}
}
}
class Toritor extends Thread{
@Override
public void run() {
for(int i=1;i<=100;i++){
System.out.println("烏龜跑了"+i+"步");
}
}
}
執行緒的使用
package com.jimory.thread.create;
public class ThreadTest01 {
/**
* 這裡有三個執行緒,main方法也是一個執行緒,倆個start()倆個執行緒,共三個
* 或者可以說是五個執行緒,另外倆個是異常和後臺jc
* @param args
*/
public static void main(String[] args) {
Rabbit ra = new Rabbit();
Toritor to = new Toritor();
ra.start(); //啟動執行緒,注意不能通過呼叫run方法
to.start();
for(int i=1;i<=100;i++){
System.out.println("main方法"+i+"步");
}
}
}
方式二
優點:解決了方式一的單繼承問題,比如說某個類必須繼承另一個類,由於單繼承問題所以不能繼承Thread類,通過方式二的介面方式(這裡用到了靜態代理),推介使用
執行緒的建立
package com.jimory.thread.create;
/**
* 執行緒建立(二)
* 1、實現Runnable介面
* 2、重寫run方法
*
* 執行緒使用
* 1、建立真實角色
* 2、建立代理物件 + 引用(引用真實角色物件)
* 2、代理物件.start()
* @author Jimory
*
*/
public class Rabbit02 implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("hahahahhahaahha"+i);
}
}
執行緒的使用
package com.jimory.thread.create;
public class RunnableTest {
public static void main(String[] args) {
//建立真實角色
Rabbit02 ra2 = new Rabbit02();
//建立代理角色 + 引用
Thread th = new Thread(ra2, "路人甲");
//代理角色啟動執行緒
th.start();
for(int i=0;i<100;i++){
System.out.println("eeee"+i);
}
}
方式三
package com.jimory.thread.create;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 執行緒建立 較其他倆種建立方式,Callable介面可以返回值,可以丟擲異常
* 1、類要實現Callable介面
* 2、ExecutorService ser = Executors.newFixedThreadPool(1); 開啟幾個執行緒就pool就寫幾
*
* 執行緒關閉
* ser.shutdownNow();
* @author Jimory
*
*/
public class Call{
/**
* 執行緒建立、關閉、獲取返回值例項
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
//建立執行緒
ExecutorService ser = Executors.newFixedThreadPool(1);
Race race = new Race();
//獲取值
Future<Integer> result = ser.submit(race);
int num = result.get();
System.out.println(num);
//執行緒關閉
ser.shutdownNow();
}
}
class Race implements Callable<Integer>{
@Override
public Integer call() throws Exception {
return 1000;