您的位置:首页 > 编程语言 > Java开发

并发模式Future ,JAVA内置模块Callable接口实现 实例

2014-11-25 10:41 881 查看
package futureCallable;

import java.util.concurrent.Callable;

public class RealData implements Callable<String> {

private String para;

public RealData(String para) {
this.para = para;
}

@Override
public String call() throws Exception {
StringBuffer sb = new StringBuffer();

// 在这里是真实的业务逻辑
for (int i = 0; i < 10; i++) {
sb.append(para + i);
System.out.println(para+"处理中");
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
return sb.toString();
}

}

package futureCallable;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class Main {

public static void main(String[] args) {
RealData realData = new RealData("a");
// 构造FutureTask
FutureTask<String> future = new FutureTask<String>(realData);
RealData realData2 = new RealData("b");
// 构造FutureTask
FutureTask<String> future2 = new FutureTask<String>(realData);

ExecutorService executor = Executors.newFixedThreadPool(2);

// 开启线程进行RealData的call()的执行
executor.submit(future);
executor.submit(future2);
System.out.println("请求完毕");

try {
// 这里可以用一个sleep代替对其他业务逻辑的处理
// 在处理这些业务逻辑过程中,RealData被创建,从而充分利用了等待时间
for (int i = 0; i < 20; i++) {
Thread.sleep(100);
System.out.println("处理其他数据中" + i);
}

//获取返回值,如果此时call没执行完成,则依然会等待。
System.out.println(future.get());
System.out.println(future2.get());

} catch (Exception e) {

}

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