gpt4 book ai didi

java - java中安全的多线程文件创建

转载 作者:行者123 更新时间:2023-12-01 15:38:22 24 4
gpt4 key购买 nike

我有一个 web 应用程序,有时需要从 url 下载一些字节并将其打包并发回给请求者。下载的字节会存储一段时间,以便在需要下载相同的 URL 时可以重复使用它们。我试图找出如何最好地防止线程同时下载相同的网址(如果请求同时传入)。我正在考虑创建一个如下所示的类,以防止同时下载相同的网址。如果一个 url 无法被锁定,那么它要么等到它不再被锁定才尝试下载它,只要它在解锁后不存在。

public class URLDownloader
{
HashMap<String,String> activeThreads = new HashMap<String,String>();

public synchronized void lockURL(String url, String threadID) throws UnableToLockURLException
{
if(!activeThreads.containsKey(url))
activeThreads.put(url, threadID)
else
throw UnableToLockURLException()
}

public synchonized void unlockURL(String url, String threadID)
{
//need to check to make sure its locked and by the passed in thread
returns activeThreads.remove(url);
}

public synchonized void isURLStillLocked(String url)
{
returns activeThreads.contains(url);
}

}

有没有人有更好的解决方案?我的解决方案看起来有效吗?是否有任何开源组件已经可以很好地做到这一点,我可以利用?

谢谢

最佳答案

我建议保留ConcurrentHashSet<String>跟踪对所有线程可见的唯一 URL。此构造可能不直接存在于 java 库中,但可以通过 ConcurrentHashMap 轻松构造,如下所示:Collections.newSetFromMap(new ConcurrentHashMap<String,Boolean>())

关于java - java中安全的多线程文件创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com