//生产线程,不断将交换得来的空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小时内删除。
留言与评论(共有 0 条评论) |