一个示例,向您展示如何创建线程安全序列生成器。
1. SequenceGenerator
SequenceGenerator.java
package com.mkyong.concurrency.examples.sequence.generator;
public interface SequenceGenerator {
long getNext();
}
1.1首先尝试直接读取,添加,写入值。 下面的方法不是线程安全的,多个线程可能同时获得相同的值。
UnSafeSequenceGenerator.java
package com.mkyong.concurrency.examples.sequence.generator;
public class UnSafeSequenceGenerator implements SequenceGenerator {
private long value = 1;
@Override
public long getNext() {
return value++;
}
}
1.2要解决此问题,请将getNext()
作为synchronized
方法。
SyncSequenceGenerator.java
package com.mkyong.concurrency.examples.sequence.generator;
public class SyncSequenceGenerator implements SequenceGenerator {
private long value = 1;
@Override
public synchronized long getNext() {
return value++;
}
}
1.3更好的解决方案是使用concurrent.atomic
AtomicLong
类,例如