多线程:程序创建 10 个线程并调用方法 print thread 确保此方法的输出不会相互中断
Multi-threading: Program create 10 threads and calls method print thread make sure the output of this method do not interrupt each other
上面的程序通过调用 wait()
和 join()
来工作。你能告诉我应该使用哪种方法吗?或者有没有更好的方法来编写这个程序。提前致谢:)
对于 thread.wait()
我在调用 t.start()
.
之前创建了一个同步块
public class DisplayThread {
public synchronized void printThread(int threadNumber){
System.out.println("I am thread number: " + threadNumber);
}
}
public class Thread1 extends Thread {
DisplayThread d;
int num;
Thread1(DisplayThread d, int num) {
this.d = d;
this.num = num;
}
public void run() {
d.printThread(num);
}
public static void main(String[] args) {
DisplayThread d = new DisplayThread();
Thread[] t = new Thread[10];
for (int i = 0; i < 10; i++) {
t[i] = new Thread1(d, i);
t[i].start();
try {
t[i].join(); **//t[i].wait(1000) also works fine**
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Can you tell me which method I should use?
您只需要使用 join()
方法,通过该方法告诉 main
线程不要启动(即 t[i].start()
行)迭代中的下一个线程。如果您不使用 join(),main
线程也会 运行 并行并启动其他线程。
此外,wait()
和 notify()
旨在解决不同的问题,即 producer/consumer 问题,我建议您查看 here 以了解此概念的工作原理。
如果您的目标是同时执行 10 个 Thread
,则需要将 Thread#join
调用移出初始循环。
for (int i = 0; i < 10; i++) {
t[i] = new Thread1(d, i);
t[i].start();
}
for (int i = 0; i < 10; i++) {
try {
t[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
除此之外,我觉得一切都很好!
上面的程序通过调用 wait()
和 join()
来工作。你能告诉我应该使用哪种方法吗?或者有没有更好的方法来编写这个程序。提前致谢:)
对于 thread.wait()
我在调用 t.start()
.
public class DisplayThread {
public synchronized void printThread(int threadNumber){
System.out.println("I am thread number: " + threadNumber);
}
}
public class Thread1 extends Thread {
DisplayThread d;
int num;
Thread1(DisplayThread d, int num) {
this.d = d;
this.num = num;
}
public void run() {
d.printThread(num);
}
public static void main(String[] args) {
DisplayThread d = new DisplayThread();
Thread[] t = new Thread[10];
for (int i = 0; i < 10; i++) {
t[i] = new Thread1(d, i);
t[i].start();
try {
t[i].join(); **//t[i].wait(1000) also works fine**
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Can you tell me which method I should use?
您只需要使用 join()
方法,通过该方法告诉 main
线程不要启动(即 t[i].start()
行)迭代中的下一个线程。如果您不使用 join(),main
线程也会 运行 并行并启动其他线程。
此外,wait()
和 notify()
旨在解决不同的问题,即 producer/consumer 问题,我建议您查看 here 以了解此概念的工作原理。
如果您的目标是同时执行 10 个 Thread
,则需要将 Thread#join
调用移出初始循环。
for (int i = 0; i < 10; i++) {
t[i] = new Thread1(d, i);
t[i].start();
}
for (int i = 0; i < 10; i++) {
try {
t[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
除此之外,我觉得一切都很好!