Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建打印消息的线程_Java_Multithreading - Fatal编程技术网

Java 创建打印消息的线程

Java 创建打印消息的线程,java,multithreading,Java,Multithreading,不确定我是否做对了。我需要做一个新的线程来写出一定次数的消息。我认为这到目前为止是有效的,但不确定这是否是最好的方法。然后,我需要在线程完成运行后显示另一条消息。我该怎么做?使用isAlive?我如何实现这一点 public class MyThread extends Thread { public void run() { int i = 0; while (i < 10) { System.out.println("h

不确定我是否做对了。我需要做一个新的线程来写出一定次数的消息。我认为这到目前为止是有效的,但不确定这是否是最好的方法。然后,我需要在线程完成运行后显示另一条消息。我该怎么做?使用isAlive?我如何实现这一点

public class MyThread extends Thread {

    public void run() {
        int i = 0;
        while (i < 10) {
            System.out.println("hi");
            i++;
        }
    }

    public static void main(String[] args) {
        String n = Thread.currentThread().getName();
        System.out.println(n);
        Thread t = new MyThread();
        t.start();
    }
}

到现在为止,你已经走上正轨了。现在,为了显示另一条消息,当这个线程完成时,您可以从主线程调用这个线程。当您使用t.join方法时,还需要处理InterruptedException

然后,当线程t完成时,主线程将继续。因此,继续您的主线,如下所示:-

t.start();
try {
    t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("Your Message"); 

当您在此处调用t.join某个特定线程(主线程)时,该线程将继续其进一步执行,只有当线程t已完成其执行时才继续执行。

到目前为止,您已走上正轨。现在,为了显示另一条消息,当这个线程完成时,您可以从主线程调用这个线程。当您使用t.join方法时,还需要处理InterruptedException

然后,当线程t完成时,主线程将继续。因此,继续您的主线,如下所示:-

t.start();
try {
    t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("Your Message"); 
当您在这里调用t.join到一个特定的线程main thread时,该线程将继续它的进一步执行,只有当线程t完成它的执行时。

扩展线程类本身通常不是一个好的做法

您应该创建Runnable接口的实现,如下所示:

public class MyRunnable implements Runnable {

    public void run() {
        //your code here
    }
}
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
并将其一部分传递给螺纹,如下所示:

public class MyRunnable implements Runnable {

    public void run() {
        //your code here
    }
}
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
请检查下面的答案:

扩展Thread类本身通常不是一个好的做法

您应该创建Runnable接口的实现,如下所示:

public class MyRunnable implements Runnable {

    public void run() {
        //your code here
    }
}
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
并将其一部分传递给螺纹,如下所示:

public class MyRunnable implements Runnable {

    public void run() {
        //your code here
    }
}
MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();

请在此处检查此答案,以便:

这是您可以做到的

class A implements Runnable
{
    public void run()
    {
    for(int i=1;i<=10;i++)
    System.out.println(Thread.currentThread().getName()+"\t"+i+"  hi");
    }
}
class join1
{
public static void main(String args[])throws Exception
    {
    A a=new A();
    Thread t1=new Thread(a,"abhi");
    t1.start();
    t1.join();
    System.out.println("hello this is me");//the message u want to display
    }
}
有关详细信息,请参阅
这就是你可以做到的

class A implements Runnable
{
    public void run()
    {
    for(int i=1;i<=10;i++)
    System.out.println(Thread.currentThread().getName()+"\t"+i+"  hi");
    }
}
class join1
{
public static void main(String args[])throws Exception
    {
    A a=new A();
    Thread t1=new Thread(a,"abhi");
    t1.start();
    t1.join();
    System.out.println("hello this is me");//the message u want to display
    }
}
有关详细信息,请参阅

非常感谢@Tom加上并发包这不是唯一的方法。您可以查看@AmitD谢谢您的添加,但这是我们被赋予的特定任务,但我肯定会查看不同的方法,谢谢!非常感谢@Tom加上并发包这不是唯一的方法。您可以查看@AmitD谢谢您的添加,但这是我们被赋予的特定任务,但我肯定会查看不同的方法,谢谢!您发布的代码无法编译。您缺少右括号。如果缩进代码,这将更容易看到。为什么不将最后一条消息放在run方法的末尾?这样,消息将显示,线程将在1毫秒后完成。您发布的代码不会编译。您缺少右括号。如果缩进代码,这将更容易看到。为什么不将最后一条消息放在run方法的末尾?这样会显示消息,线程将在1毫秒后完成。为什么这不是一个好的做法?你能把原因也贴出来吗?@RohitJain:有很多答案,只是补充了一个作为更新。@BheshGurung。。是的,我知道。只是想让你的答案完整@罗希贾因:谢谢,我都没想过。给你+1:为什么这不是一个好的做法?你能把原因也贴出来吗?@RohitJain:有很多答案,只是补充了一个作为更新。@BheshGurung。。是的,我知道。只是想让你的答案完整@罗希贾因:谢谢,我都没想过。给你+1:你做了什么改变?为什么?它将如何影响输出?你能解释一下,而不是粘贴无声代码吗?我只是展示我的代码,先生,我不否认你的代码,因为我是新来的,所以我在这里向像你这样的人学习。@Abhishek。。当然,你一定会学到很多东西。但是,一般来说,我们希望在编写代码的同时,在答案中添加一些解释,以便OP能够理解您想要做什么。我不是说你的代码错了。非常好。但一个解释肯定会对OP有所帮助。这对你将来也会有帮助。你做了什么改变?为什么?它将如何影响输出?你能解释一下,而不是粘贴无声代码吗?我只是展示我的代码,先生,我不否认你的代码,因为我是新来的,所以我在这里向像你这样的人学习。@Abhishek。。当然,你一定会学到很多东西。但是,一般来说,我们希望在编写代码的同时,在答案中添加一些解释,以便OP能够理解您想要做什么。我不是说你的代码错了。非常好。但一个解释肯定会对OP有所帮助。这对你们将来也会有帮助。