您的位置:首页 > 其它

使用Callable接口实现多线程

2016-04-21 21:29 267 查看
相比Runnable接口,Callable接口有2个显著的优点:一是可以返回值 二是可以对外声明异常

举例子说明

package cpm.thread.creater;

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;

public class Call {

    public static void main(String[] args) throws InterruptedException, ExecutionException {

      ExecutorService ser= Executors.newFixedThreadPool(2);

      Race race=new Race(1000);

      Race race2=new Race(500);

      Future<Integer> result=ser.submit(race);

      Future<Integer> result2=ser.submit(race2);

      Thread.sleep(2000);

      race.setFlag(false);

      race2.setFlag(false);

      int num=result.get();

      int num2=result2.get();

      System.out.println(num);

      System.out.println(num2);

      ser.shutdown();

    }

 

}

class Race implements Callable<Integer>

{

    private long time;

    private Boolean flag=true;

    private int step;

    

   public Race(long time) {

        super();

        this.time = time;

    }

@Override

       public Integer call() throws Exception {

       while(flag)

       {

           Thread.sleep(time);

           step++;

       }

           return step;

       }

public long getTime() {

    return time;

}

public void setTime(long time) {

    this.time = time;

}

public Boolean getFlag() {

    return flag;

}

public void setFlag(Boolean flag) {

    this.flag = flag;

}

public int getStep() {

    return step;

}

public void setStep(int step) {

    this.step = step;

}    

}

我们给线程类Race实现Callable接口 <>里面是返回值类型,重写call()方法,设置变量time控制线程休眠时间,flag控制线程停止,step作为返回值

mian方法中,我们首先声明了一个线程池,参数为线程个数,     Future<Integer> result=ser.submit(race);代表启动线程,      ser.shutdown();关闭线程池

运行main方法,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: