我在一个具有可变状态的类中有一个方法,该方法从单个线程调用99.999%,除了一次从关闭钩子中的不同线程调用。
这是该类的骨架
public class StateHolder {
private final Queue<String> q;
public synchronized void add(String s) {
this.q.offer(s);
this.lastUpdateTime = System.currentTimeMillis();
}
public synchronized void removeUntil(Predicate<String> p) {
while(!q.isEmpty()) {
if (p.applies(q.peek()) {
q.poll();
} else {
break;
}
}
this.lastUpdateTime = System.currentTimeMillis();
}
public synchronized int pendingRecords() {
return this.q.size();
}
public synchronized void shutdown(Consumer<String> c) {
while(!q.isEmpty()) c.accept(q.poll());
}
}
在上面的, 方法 ,并将始终在应用程序的生存期内从同一线程调用(每秒 1000 多次调用,具体取决于应用程序的流量)。在应用程序关闭期间,将由不同的线程调用,这将在几周内发生一次。addpendingRecordsremoveUntilshutdown
对于此访问模式,是否存在已知更适合性能的同步原语?或者我应该只使用传统的块并让JIT弄清楚吗?synchronized
PIPIONE
红糖糍粑
跃然一笑
随时随地看视频慕课网APP
相关分类