我有一个多读的A类,可使用另一个B类(A只有一个B类)的<代码>insert()方法。
如果不使整个方法同步进行,是否有更好的办法使以下方法同步进行? (减少同步管理)
private void insert(byte[] shardKey, byte[] queueKey,
byte[] value, PipelineMessageType msgType) {
PipelineMessage pipelineMessage = new PipelineMessage(queueKey,
value, msgType);
LinkedBlockingQueue<PipelineMessage> queue;
JedisShardInfo shardInfo = shardedJedis.getShardInfo(shardKey); // shardedJedis is an instance variable of this class
String mapKey = shardInfo.getHost() + shardInfo.getPort();
queue = shardQueue.get(mapKey); // shardQueue is an instance variable of this class
boolean insertSuccessful = queue.offer(pipelineMessage);
if(!insertSuccessful) {
// perform the pipeline sync - flush the queue
// use another thread for this
// (processing of queue entries is given to another thread here)
// queue would be empty now. Insert (k,v)
queue.offer(pipelineMessage);
}
}
我只试图使接触实例变数的碎块同步,但可能会出现一种情况,即两条镜子试图插入一个完整的电线,并进入<条码>。 然后,两条路透镜可能会处理我不想要的点名。
欢迎任何建议。 事先感谢你。