我正在运行两个线程,其中一个线程是读取Feed,并将元素获取到全局变量中,另一个线程用于从全局变量中获取信息,它将开始下载文件。
写入文件线程的处理时间仅需数毫秒,而下载线程的处理时间则可能长达40秒以上,因为它取决于文件。
问题 :
writefile 线程必须每4秒运行一次,因为我不会错过每秒钟提供信息的Feed,但是如果我运行以下程序,则 writefile 线程根本不会执行,直到下载线程完成其过程为止。
所需的解决方案:
甚至下载线程的处理时间也超过了1分钟,那时我应该调用 writefile 15次(15 * 4secs)。
(等待或 sleep 方法将延迟我的过程,因为Feed仅在几个小时内就给了我成千上万个文件)
请通过下面的代码。请编辑并分享知识。
提前致谢
public class Upload {
static List<DTOs> list = new ArrayList<E>();
String date = "";
Map<String, DTO> map = new HashMap<String, DTO>();
public static void main(String[] args) {
while (true) {
Thread writefile = new Thread() {
public void run() {
write();
// map collection is being used in download thread and also
// list
}
};
Thread download = new Thread() {
public void run() {
downloadProcess(list, date);
}
};
writefile.start();
download.start();
try {
writefile.join();
download.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
最佳答案
这里有几点。
您得到了想要的东西,我将执行以下操作:
因此,总体算法是启动一个监视线程,启动一个管理用于下载的线程池的工作委派线程,让监视线程接收一个新文件或一组文件进行下载。锁定共享数据的时间必须足够长,以更新待处理列表。当工作线程可用时,将下载管理器线程锁定的时间仅足够长,以拉出下一个作业。
关于java - 使两个线程独立于进程,而无需 sleep /等待/通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314382/