我正面临一个多线程问题。
我有10个Threads.when我们strat应用程序第一个线程将尝试创建该文件夹。 意味着当剩下的线程尝试将文件移动到该文件夹,然后创建folder.so我得到NulpointerException。如何停止剩余的theads到文件夹creater线程完成。
像这样的代码: Static int i;
moveFile()
{
if(i==1){
create();
}
move(){
}
}
答案 0 :(得分:2)
你可以通过多种方式实现这一目标。
答案 1 :(得分:2)
创建一个大小为1的锁存器(countdown latch)。
在创建文件夹的线程中,在创建文件夹后调用锁存器上的countdown()
方法。在开始任何处理(例如移动文件)之前,在所有其他线程中调用锁存器上的await()
方法。
有许多其他方法可以做到这一点。如果可以选择最简单的方法(只在创建文件夹后生成移动文件的线程/任务)
答案 2 :(得分:0)
我认为Thread.join()就是你要找的。它在线程上执行wait()(可能是超时),直到执行结束。
将“文件夹线程”的引用传递给其他每个“文件线程”,并加入()它。
示例:
public class JoinThreads {
static ArrayList<FileThread> fthreads = new ArrayList<FileThread>();
public static void main(String[] args) {
Thread folderThread = new Thread () {
@Override
public void run() {
// Create the folder
}
}.start();
// Add new threads to fthreads, pass folderThread to their constructor
for (FileThread t : fthreads) {
t.start();
}
}
public class FileThread extends Thread {
Thread folderThread;
File file;
public FileThread(Thread folderThread, File file) {
this.folderThread = folderThread;
}
@Override
public void run() {
try {
folderThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// Save the file, folder should already exist!
}
}
}