多執行緒(1)——多執行緒的建立與啟動
阿新 • • 發佈:2019-02-20
執行緒的建立
執行緒的建立主要要3種方法。
1. 繼承Thread類
package cn.zengzehao.thread;
public class FirstThread {
public static void main(String[] args) throws InterruptedException {
//建立執行緒
MyTaskThread thread = new MyTaskThread();
//或者這樣子建立執行緒
//Thread thread = new Thread(new MyTaskThread());
//啟動執行緒
thread.start();
}
}
class MyTaskThread extends Thread{
@Override
//重寫父類的run()方法
public void run() {
System.out.println("我是繼承Thread的執行緒");
}
}
- 實現Runnable介面
package cn.zengzehao.thread;
public class RunnableTest {
public static void main(String[] args) {
//建立執行緒
Thread thread = new Thread(new MyThread());
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是執行緒2");
}
});
//啟動執行緒
thread.start();
thread2.start();
}
}
class MyThread implements Runnable{
//實現Runnable介面的run()方法
@Override
public void run() {
try {
Thread.sleep(2000);
System.out.println("我是實現Runnable");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 通過Callable和Future建立執行緒
package cn.zengzehao.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableTest {
public static void main(String[] args) {
//使用FutureTask類來包裝Callable物件
FutureTask<Integer> ft = new FutureTask<Integer>(new MyTask());
//啟動執行緒
new Thread(ft).start();
try {
//獲取執行緒返回的值
Integer sum = ft.get();
System.out.println("列印返回來的值:"+sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
class MyTask implements Callable<Integer>{
//實現Callable的call()方法
@Override
public Integer call() throws Exception {
System.out.println("實現Callable");
int sum = 0;
for(int i=0;i<=100;i++){
sum+=i;
}
return sum;
}
}