Java:Echanger类实现高昂创建对象交换点

阅读: 评论:0

Java:Echanger类实现高昂创建对象交换点

Java:Echanger类实现高昂创建对象交换点

Exchanger


1)urrent.Exchanger
两个任务之间交换对象的同步点,他们各自拥有一个配对对象,每个线程上的某个方法城呈现给hange方法,并且在返回时接收器对方拥有的配对对象; 2)Exchanger的典型应用场景:一个任务在创建对象时,这些对象创建的代价很高昂,而另一个任务消费该对象,通过这种方式可以使更多的高昂创建对象,在创建时就被消费,减少高昂对象在内存中的停留时间;
//生产线程,不断将交换得来的空holder列表填充为满holder,并重新交换出去
class ExchangerProducer<T> implements Runnable{private Class<T> objectClass;  //用于产生新的T对象实例private Exchanger<List<T>> exchanger;  //记录T对象列表的交换同步点;private List<T> holder = new ArrayList<T>();     //记录T对象的列表private int size ;   //holder列表的长度public ExchangerProducer<T>(Class<T> objectClass,Exchanger<List<T>> exchanger,int size){this.objectClass = hanger = exchanger;this.size = size;}public void run(){try{while(!Thread.interrupted()){for(int i=0;i<size;i++)holder.wInstance());  //创建T对象,并填满holder列表hange(holder);  //将满的holder交换为空的holder,重新不断地填充holder}}catch(InterruptedException ex){}}
}
//消费线程,不断消费交换得满holder,产生空的holder列表,并将其交换出去
class ExchangerConsumer<T> impelements Runnable{private Exchanger<List<T>> exchanger;priavte List<T> holder = new ArrayList<T>();priavte volatile T value;public ExchangerConsumer(ExchangerConsumer<List<T>> exchanger){hanger = exchanger;}public void run(){try{while(!Thread.interruped()){holder = hange(holder);   //通过交换获取holder列表for(T x : holder){value = x;        //获取列表中的T元素并使用它<using value to do something &ve(x);   //删除列表中的T元素,逐步恢复holder为空列表}}}catch(InterruptedException ex){}}
}
//Test
class Driver{void main(){Exchanger<List<HightCostObj>> exchanger = new Exchanger<List<HightCostObj>>();ExecutorServcie exec = wCachedThreadPool();ute(new ExchangerProducer<HightCostObj>(HightCostObj.class,exchanger,N));ute(new ExchangerConsumer<HightCostObj>(exchanger));TimeUnit.SECONDS.sleep(120);execute.shutdownNow()}
}


本文发布于:2024-02-02 20:30:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170687705146261.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   Java   Echanger
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23