首页 > 解决方案 > 带重新填充的线程安全队列

问题描述

我不确定我的代理是否完全线程安全。我不想使用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());
}

编辑:我的目标是有一个队列,为每个请求它的线程提供一个代理项。

标签: javamultithreading

解决方案


推荐阅读