一般来说,Exchanger都是一个Consumer,一个producer,在适当的时候互相交换,这样可以避免锁。
我想到Exchanger N parties的一种用法。如下:
最初N个都是producer,达到一定条件之后,进行交换。根据交换的结果重新确定角色,决定自己是consumer还是producer。
这样做的结果是,最初所有都是producer,之后一部分转变成consumer。并且由于consumer以及producer的速度不一样,而能够自动适应调整。
要注意的是,JDK 1.5中的Exchanger只支持2 parties,N parties时,N > 2会导致死锁。JDK 1.6中,Exchanger重写了,没有这个问题。
在JDK 1.5中要这样用的话,可以把JDK 1.6中Exchanger源码抄过来就是了。