2 回答
TA贡献1853条经验 获得超9个赞
System.currentTimeMillis()
可能会受到时钟漂移的影响,通常粒度约为 10 毫秒。
要测量经过的时间,您应该始终使用System.nanoTime()
它,因为它可以保证准确性。
TA贡献1799条经验 获得超8个赞
它可能不会加快您的进程,但使用 aBlockingQueue肯定会使代码更清晰。
还请注意Thread.sleep没有信息时的for。
final BlockingQueue<Long> queue = new ArrayBlockingQueue<>(10);
private void startWatcherThread() {
Thread t = new Thread() {
@Override
public void run() {
while (true) {
// Waiting for results...
try {
Long polled = queue.poll(1, TimeUnit.SECONDS);
// Do something with info
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
}
private void startInfoThreads() {
for (int i = 0; i < 14; i++) {
Thread t = new Thread() {
@Override
public void run() {
Random r = new Random();
while (true) {
// Gather info, 'hits' about once every few minutes!
boolean infoRandomlyFound = r.nextInt(100) >= 99;
if (infoRandomlyFound) {
queue.put(System.currentTimeMillis());
} else {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t.start();
}
}
private void test() {
startInfoThreads();
startWatcherThread();
}
添加回答
举报