Actually it my fault. Make mRequestPTokenQueue thread safe

This commit is contained in:
seven332 committed 2016-03-19 01:19:12 +08:00
1 parent 42c4c4cfda
commit 9a5f6ccb74
1 file changed
+3 -9
@@ -69,6 +69,7 @@ import java.util.List;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
@@ -139,7 +140,7 @@ public class SpiderQueen implements Runnable {
private final Object mPTokenLock = new Object();
private volatile SpiderInfo mSpiderInfo;
private final Queue<Integer> mRequestPTokenQueue = new LinkedList<>();
private final Queue<Integer> mRequestPTokenQueue = new ConcurrentLinkedQueue<>();
private final Object mPageStateLock = new Object();
private volatile int[] mPageStateArray;
@@ -828,14 +829,7 @@ public class SpiderQueen implements Runnable {
// handle pToken request
while (!Thread.currentThread().isInterrupted()) {
Integer index;
synchronized (mPTokenLock) {
if (mRequestPTokenQueue.isEmpty()) {
index = null;
} else {
index = mRequestPTokenQueue.poll();
}
}
Integer index = mRequestPTokenQueue.poll();
if (index == null) {
// No request index, wait here