package com.cyj.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接口实现多线程可以对外声明异常
* 课题返回值
* @author Chyjrily
*
*/
public class MyCallable {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//借助执行调度服务ExecutorService
ExecutorService ser = Executors.newFixedThreadPool(2); //括号里面表示打开的线程数
Run r1 = new Run("r1",1000);
Run r2 = new Run("r2",500);
//获取Future对象
Future result1 = ser.submit(r1);
Future result2 = ser.submit(r2);
Thread.sleep(2000);//延时两秒
r1.setFlag(false); //控制线程体循环的时间
r2.setFlag(false);
//获取值
int num1 = (int) result1.get();
int num2 = (int) result2.get();
System.out.println("r1跑了"+num1);
System.out.println("r2跑了"+num2);
//停止服务
ser.shutdown();
}
}
class Run implements Callable<Integer>{
private String name;
private int time;
private boolean flag = true;
private int step = 0;
public Run(){
}
public Run(String name) {
super();
this.name = name;
}
public Run(String name,int time) {
super();
this.name = name;
this.time = time;
}
public Integer call() throws Exception{
while(flag) {
Thread.sleep(time); //延时time
step++;
}
return step;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public int getStep() {
return step;
}
public void setStep(int step) {
this.step = step;
}
}
Callable接口实现多线程
猜你喜欢
转载自blog.csdn.net/qq_42036616/article/details/81062280
今日推荐
周排行