Callable--创建有返回值的线程

转自:JAVA 笔记 Callable 与 FutureTask:有返回值的多线程

 常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。

长工类:

长工类实现了Callable接口,线程运行完成后返回一个Integer值。 

package com.lk.C;



import java.util.concurrent.Callable;



public class Changgong implements Callable<Integer>{

//泛型限制了重写方法的返回值类型

    private int hours=12;

    private int amount;

    

    @Override

    public Integer call() throws Exception {

        while(hours>0){

            System.out.println("I'm working......");

            amount ++;

            hours--;

            Thread.sleep(1000);

        }

        return amount;

    }

}

地主:主进程

监工:FutureTask 

package com.lk.C;



import java.util.concurrent.ExecutionException;

import java.util.concurrent.FutureTask;





public class Dizhu {

        

    public static void main(String args[]){

        Changgong worker = new Changgong();

        FutureTask<Integer> jiangong = new FutureTask<Integer>(worker);

        new Thread(jiangong).start();

        while(!jiangong.isDone()){

            try {

                System.out.println("看长工做完了没...");

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        int amount;

        try {

            amount = jiangong.get();

            System.out.println("工作做完了,上交了"+amount);

        } catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (ExecutionException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        

        

    }

}
I'm working......

看长工做完了没...

I'm working......

看长工做完了没...

看长工做完了没...

I'm working......

看长工做完了没...

I'm working......

I'm working......

看长工做完了没...

I'm working......

看长工做完了没...

看长工做完了没...

I'm working......

I'm working......

看长工做完了没...

看长工做完了没...

I'm working......

I'm working......

看长工做完了没...

I'm working......

看长工做完了没...

看长工做完了没...

I'm working......

看长工做完了没...

工作做完了,上交了12

 

你可能感兴趣的:(callable)