我在这里要做的是逐个上传文件。例如,如果我的文件列表包含2个准备上传的文件,我想在上传和创建第一个文件后上传第二个文件。
实际上,我循环文件列表并从每次迭代中上传文件,等待上次上传完成。
这是我想要的想法:
for(FileContainerBean fileContainer:fileContainerList){
FileUpload fileUpload=new FileUpload(fileContainer.getFile());
Thread th=new Thread(fileUpload);
th.start();
//Now i want here to wait beafore moving to the next iteration
while(!fileContainer.isCreated(){
wait();
}
if(fileContainer.isCreated(){
notify();
}
}
fileContainer是一个带有getter和setter的bean(setFile,getFile,isCreated ....)。
当上传结束并创建文件时(HttpResponseCode = 201),fileContainer.isCreated = true。最初,isCreated = false;
我希望我足够清楚!那么可以这样做吗?
提前致谢!
伊斯梅尔
答案 0 :(得分:1)
所以你基本上只想在th
线程完成后才继续执行?只是不要在单独的线程中运行它,而是:
for(FileContainerBean fileContainer:fileContainerList){
FileUpload fileUpload=new FileUpload(fileContainer.getFile());
fileUpload.run();
// continues after the file is uploaded
}
如果你想将它保存在一个单独的线程中(正如你在评论中所说的那样),那么在后台执行整个循环:
Runnable uploadJob = new Runnable() {
public void run() {
for(FileContainerBean fileContainer:fileContainerList){
FileUpload fileUpload=new FileUpload(fileContainer.getFile());
fileUpload.run();
// continues after the file is uploaded
}
}
};
new Thread(uploadJob).start();
答案 1 :(得分:0)
这样做
while(true){
if(fileContainer.isCreated()){
break;
}
}
答案 2 :(得分:0)
您应该在线程notify()
的{{1}}方法中设置run
,以便在新线程完成上传后,它将通知等待的线程。
或者我发现您希望主线程等到上传过程完成,那么为什么不简单地让程序单线程化。
我的意思是不要在新线程中启动上传过程,因为默认行为是等到当前上传完成然后开始第二次上传,这就是你想要的。