码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-07 19:20:45      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

转自: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--创建有返回值的线程

标签:

原文地址:http://www.cnblogs.com/luankun0214/p/4399057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!