Callable接口实现多线程

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;
	}
	
	
}

猜你喜欢

转载自blog.csdn.net/qq_42036616/article/details/81062280