gpt4 book ai didi

java - Java 线程中的函数 Join()

转载 作者:行者123 更新时间:2023-12-02 05:58:47 25 4
gpt4 key购买 nike

我有这个代码:

class PrintDemo {  
public void printCount(){
try {
for(int i = 5; i > 0; i--) {
System.out.println("Counter --- " + i );
}
} catch (Exception e) {
System.out.println("Thread interrupted.");
}
}
}

class ThreadDemo extends Thread {
private Thread t;
private String threadName;
PrintDemo PD;

ThreadDemo( String name, PrintDemo pd) {
threadName = name;
PD = pd;
}

public void run() {
synchronized(PD) {
PD.printCount();
}
System.out.println("Thread " + threadName + " exiting.");
}

public void start () {
System.out.println("Starting " + threadName);
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}
}

public class TestThread {
public static void main(String args[]) {

PrintDemo PD = new PrintDemo();

ThreadDemo T1 = new ThreadDemo( "Thread - 1 ", PD );
ThreadDemo T2 = new ThreadDemo( "Thread - 2 ", PD );

T1.start();
T2.start();

// wait for threads to end
try {
T1.join();
T2.join();
} catch( Exception e) {
System.out.println("Interrupted");
}
System.out.println("hello");
}
}

当我运行此命令时,问候消息不会在最后显示。它假设主线程会等待其他线程结束,对吗???

提前致谢。

最佳答案

ThreadDemo类,这是非常错误的。我很抱歉这样调用它,但这不是一件值得做的事情。

指出特定的事物:

public void start () {
System.out.println("Starting " + threadName);
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}

这将启动一个新的且不同的线程,与您稍后调用 join 的 ThreadDemo 实例无关永远不要这样做。 join 永远不会返回,因为 ThreadDemo 线程从未启动。

相反,您的 PrintDemo 可以实现 Runnable,然后您可以将其传递给线程。

class PrintDemo implements Runnable {
@Override
public synchronized void run() {
for(int i = 5; i > 0; i--) {
System.out.println("Counter --- " + i );
}
}
}

class Main {
public static void main(String[] args) {
PrintDemo pd = new PrintDemo();

Thread t1 = new Thread(pd);
Thread t2 = new Thread(pd);

t1.start();
t2.start();

try {
t1.join();
t2.join();
} catch(InterruptedException ie) {
System.err.println(ie);
}
}
}

如果您从自己的代码中删除带有 t 的废话,它应该可以工作,但实现 Runnable 更惯用。线程已设置为执行您想要执行的操作。

关于java - Java 线程中的函数 Join(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com