package com.exception4;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*
通过Callable接口实现多线程
*/
class NumThread implements Callable{//也可以加入泛型,默认返回Object
@Override
public Object call() throws Exception {
int sum=0;
for(int i=1;i<=100;i++){
// Thread.sleep(30);
System.out.println(Thread.currentThread().getName()+"::::"+i);
sum+=i;
}
return sum;
}
}
public class Main1 {
public static void main(String[] args) throws Exception {
NumThread n1=new NumThread();//线程1
NumThread n2=new NumThread();//线程2
NumThread n3=new NumThread();//线程3
NumThread n4=new NumThread();//线程4
//把线程分别装入不同的FutureTask对象中,该FutureTask才可以装载到Thread类中。
FutureTask ftk= new FutureTask(n1);
FutureTask ftk2= new FutureTask(n2);
FutureTask ftk3= new FutureTask(n3);
FutureTask ftk4= new FutureTask(n4);
//最后也是通过Thread()中的start()方法启动线程
new Thread(ftk).start();
new Thread(ftk2).start();
new Thread(ftk3).start();
new Thread(ftk4).start();
try {
//该线程可以返回线程的返回值。
Object o=ftk.get();
Object o2=ftk2.get();
Object o3=ftk3.get();
Object o4=ftk4.get();
System.out.println(o);
System.out.println(o2);
System.out.println(o3);
System.out.println(o4);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
运行结果