我只是在以下情况下寻找高性能的模式:
我们有N个线程正在执行一些处理,在此处理过程中,可能需要执行封装在Java类中的“特殊”代码。这些对象不是线程安全的,但是我可以让M个对象并行执行。
因此,我从N个线程中调用了M个对象的池。
thread 1 :
doing thinks
PoolObject -> Object1.execute() // no synchronize
thread 2 :
doing thinks
PoolObject -> Object2.execute() // no synchronize
thread n :
doing thinks
PoolObject -> wait object is available
PoolObject -> Object2.execute()
ArrayBlockingQueue是可以使用的实现,但它使用的是ReentrantLock(又名sync)。这是类似于ConcurrentHashMap的解决方案,它使用了compareAndSwapLong之类的机制。
是否有一些现有代码可在诸如ConcurrentHashMap这样的高性能场景中执行此操作?
最佳答案
最终,我找到了ConcurrentLinkedQueue类。
对于那些想知道CAS是为什么还是同步的人,可以阅读this。