Java下载并发数据
我正在开发一个应用程序,可以下载城市不同地方的地图。为了做到这一点,我在每个地方都有一个线程,在这里我选择了这些分片并创建了一个线程来下载每个分片 问题是如何避免为线程池中已经存在的磁贴创建线程 不应只是检查文件是否存在,因为该磁贴的线程可能已经存在(其他地方已经需要该磁贴),但文件尚未创建-Java下载并发数据,java,concurrency,Java,Concurrency,我正在开发一个应用程序,可以下载城市不同地方的地图。为了做到这一点,我在每个地方都有一个线程,在这里我选择了这些分片并创建了一个线程来下载每个分片 问题是如何避免为线程池中已经存在的磁贴创建线程 不应只是检查文件是否存在,因为该磁贴的线程可能已经存在(其他地方已经需要该磁贴),但文件尚未创建- 有什么想法吗?谢谢您可以使用ConcurrentHashMap存储所有下载线程 在启动hashmap之前向其添加线程,并在销毁它之前将其删除。当然,在启动该磁贴的线程之前,您将检查hashmap中特定的磁
有什么想法吗?谢谢您可以使用
ConcurrentHashMap
存储所有下载线程
在启动hashmap之前向其添加线程,并在销毁它之前将其删除。当然,在启动该磁贴的线程之前,您将检查hashmap中特定的磁贴
这是我想到的最简单的解决方案,它很容易实现,但是您必须仔细阅读如何使用这种hashmap来保证并发性,而不存在一致性问题
您还可以使用
Collections.newSetFromMap(new ConcurrentHashMap<Tile,Thread>())
Collections.newSetFromMap(新的ConcurrentHashMap())
这样,您就不会有任何关联
Tile
->Thread
,而只是一个结构,您可以为它设置set.contains(Tile)
,以检查某个线程是否已经安排了一个Tile。更好的设计可能是有一个单独的线程来进行下载。它可以访问从中读取的文件,以了解要下载的磁贴。在应用程序中的其他位置,分片将放置在此队列上