同步线程等待多个线程
Syncronize thread to wait for multiple threads
我有四个线程处理四个文件,然后我想要一个线程来连接这些文件。
我的解决方案是让第五个线程 (thread1) 连接起来。
sum = new Thread() {
public void run() {
if (thread1.isAlive()) {
synchronized (lock1) {
while (thread1.isAlive()) {
try {
lock1.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread2.isAlive()) {
synchronized (lock2) {
while (thread2.isAlive()) {
try {
lock2.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread3.isAlive()) {
synchronized (lock3) {
while (thread3.isAlive()) {
try {
lock3.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread4.isAlive()) {
synchronized (lock4) {
while (thread4.isAlive()) {
try {
lock4.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} // new MakeDataSet(path + "f4", "d4.arff");
如果线程没有按照它们的索引顺序完成(比如线程 3 在线程 2 或线程 1 之前完成,或者线程 4 在 thread3/thread2/thread1 之前完成),在这种情况下程序永远不会结束,就会出现问题。
java.lang.Thread
的方法 join() 允许您等待线程退出。你可以尝试使用这样的东西:
//wait for all threads to finish
try {
thread1.join();
thread2.join();
thread3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
我有四个线程处理四个文件,然后我想要一个线程来连接这些文件。
我的解决方案是让第五个线程 (thread1) 连接起来。
sum = new Thread() {
public void run() {
if (thread1.isAlive()) {
synchronized (lock1) {
while (thread1.isAlive()) {
try {
lock1.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread2.isAlive()) {
synchronized (lock2) {
while (thread2.isAlive()) {
try {
lock2.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread3.isAlive()) {
synchronized (lock3) {
while (thread3.isAlive()) {
try {
lock3.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
if (thread4.isAlive()) {
synchronized (lock4) {
while (thread4.isAlive()) {
try {
lock4.wait();
} catch (InterruptedException ex) {
Logger.getLogger(mainClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} // new MakeDataSet(path + "f4", "d4.arff");
如果线程没有按照它们的索引顺序完成(比如线程 3 在线程 2 或线程 1 之前完成,或者线程 4 在 thread3/thread2/thread1 之前完成),在这种情况下程序永远不会结束,就会出现问题。
java.lang.Thread
的方法 join() 允许您等待线程退出。你可以尝试使用这样的东西:
//wait for all threads to finish
try {
thread1.join();
thread2.join();
thread3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}