java - 带重新填充的线程安全队列
问题描述
我不确定我的代理是否完全线程安全。我不想使用ConcurrentLinkedQueue
而不是LinkedList
,因为我必须确保队列不为空,所以 getProxy() 已经同步。
“obtainProxy()”函数由几个线程访问。
是否足以使其线程安全?这种方法正确吗?
private static final Queue<Proxy> PROXIES = new LinkedList();
public static Proxy obtainProxy() {
boolean isProxyOk = false;
Proxy proxy = null;
do {
proxy = getProxy();
isProxyOk = testProxy(proxy);
} while (!isProxyOk);
return proxy;
}
private synchronized static Proxy getProxy() {
if(PROXIES.isEmpty()) prepareProxies();
return PROXIES.poll();
}
private static void prepareProxies() {
PROXIES.add(new Proxy());
PROXIES.add(new Proxy());
PROXIES.add(new Proxy());
}
编辑:我的目标是有一个队列,为每个请求它的线程提供一个代理项。