【发布时间】:2014-07-06 00:41:26
【问题描述】:
我在使用 java 中的多线程时遇到了一些问题。我是一名学生,Java 初学者,只是为了娱乐目的而开发这个(抱歉语法不好,英语不是我的第一个语言)。
我正在做一个供个人使用的小型下载器,它最多接受 5 个同时下载。每次下载都由不同的线程处理(不是普通线程,只是 swingworker,我也使用它来避免 UI 冻结。)。
public static String PATH; //File path
public static String NAME; //File name
//Download Method
public void download() {
//download code...
}
此方法运行良好(它会下载一个文件,然后按预期将其保存到硬盘中)。但是,当我想同时进行两次(或更多)下载时,问题就来了。考虑我同时下载两个文件,文件 A 和 文件 B。当我开始下载A时,字符串PATH和NAME根据文件A获取其值,一切OK。然后,我开始下载 B,之前存储的 A 值被替换为对应于 B 的值。所以当A下载完成后,文件名与下载B完成时B应该有的相同。
继续,我需要同一变量的不同实例,它们将包含不同且独立的值。
我开始研究该主题并导致ThreadLocal变量。这种类型的变量应该在每个正在运行的线程中发生变化,这正是我所需要的。
我试图在我的代码中实现这一点。
public static String PATH; //File path
public static String NAME; //File name
public ThreadLocal<String> TL_PATH = new ThreadLocal<String>();
public ThreadLocal<String> TL_NAME = new ThreadLocal<String>();
public void download() {
//Try to set ThreadLocal to PATH and NAME variables.
TL_NAME.set(NAME);
TL_PATH.set(PATH);
//download code...
}
一旦我这样做了,一切都一样了。我的代码有什么问题? (在任何情况下都不会抛出异常,就像我之前解释的那样)
【问题讨论】:
标签: java multithreading