浅谈java.util.concurrent包的并发处理
来源:互联网 发布:数据采集处理 dsp fpga 编辑:程序博客网 时间:2024/05/21 06:46
java.util.concurrent下主要的接口和类:
packageorg.test.concurrent;
/**
* <p>Title: LoonFramework</p>
* <p>Description:利用Future模式进行处理</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
public abstractclass FutureProxy<T>{
private finalclass CallableImplimplementsCallable<T>{
public T call()throwsException{
return FutureProxy.this.createInstance();
}
}
private staticclass InvocationHandlerImpl<T>implementsInvocationHandler{
private Future<T>future;
private volatile T instance;
InvocationHandlerImpl(Future<T>future){
this.future=future;
}
public Objectinvoke(Objectproxy,Methodmethod,Object[] args)
throws Throwable {
synchronized(this){
if(this.future.isDone()){
this.instance=this.future.get();
}else{
while(!this.future.isDone()){
try{
this.instance=this.future.get();
}catch(InterruptedException e){
Thread.currentThread().interrupt();
}
}
}
return method.invoke(this.instance, args);
}
}
}
/**
* 实现java.util.concurrent.ThreadFactory接口
* @author chenpeng
*
*/
private staticfinalclass ThreadFactoryImplimplementsThreadFactory{
public ThreadnewThread(Runnable r){
Thread thread = newThread(r);
thread.setDaemon(true);
return thread;
}
}
private staticExecutorService service=Executors.newCachedThreadPool(new ThreadFactoryImpl());
protected abstract T createInstance();
protected abstractClass<?extends T>getInterface();
/**
* 返回代理的实例
* @return
*/
@SuppressWarnings("unchecked")
public final T getProxyInstance(){
Class<?extends T> interfaceClass=this.getInterface();
if (interfaceClass==null||!interfaceClass.isInterface()){
throw new IllegalStateException();
}
Callable<T> task=new CallableImpl();
Future<T>future= FutureProxy.service.submit(task);
return (T)Proxy.newProxyInstance(interfaceClass.getClassLoader(),
new Class<?>[]{ interfaceClass},new InvocationHandlerImpl(future));
}
}
packageorg.test.concurrent;
import java.util.Calendar;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
interface DateTest{
String getDate();
}
class DateTestImpl implements DateTest{
private String _date=null;
public DateTestImpl(){
try{
_date+=Calendar.getInstance().getTime();
//设定五秒延迟
Thread.sleep(5000);
}catch(InterruptedException e){
}
}
public StringgetDate(){
return "date "+_date;
}
}
class DateTestFactory extends FutureProxy<DateTest>{
@Override
protected DateTest createInstance(){
return new DateTestImpl();
}
@Override
protected Class<?extends DateTest>getInterface(){
return DateTest.class;
}
}
public class Test{
public staticvoid main(String[] args){
DateTestFactory factory = new DateTestFactory();
DateTest[] dts=new DateTest[100];
for(int i=0;i<dts.length;i++){
dts[i]=factory.getProxyInstance();
}
//遍历执行
for(DateTest dt: dts){
System.out.println(dt.getDate());
}
}
}
原来很麻烦的并发处理,现在轻松的得以完成。
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 浅谈java.util.concurrent包的并发处理
- 谈谈java.util.concurrent包的并发处理(转)
- java.util.concurrent 并发处理
- java并发包java.util.concurrent
- java线程并发包util.concurrent的研究(一)
- java线程并发包util.concurrent的研究(二)
- java线程并发包util.concurrent的研究(三)
- java线程并发包util.concurrent的研究(四)
- java线程并发包util.concurrent的研究(五)
- sql经典
- ecshop模板中foreach的使用方法
- 利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复
- 动态1:由函数名称调用函数
- yii 在controller里面控制全局所有action的侧边栏或者导航栏的菜单
- 浅谈java.util.concurrent包的并发处理
- ecshop lang用法
- TIdm368开发--nfs网络文件系统启动问题集合
- TS 流分析
- 动态2:由类名创建对象
- cloudstack4.0.1允许的cpu和内存
- 进程地址空间(linux)
- linux常用shell命令
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(2)