在Java中命令执行Threads

时间:2012-05-18 08:54:18

标签: java multithreading synchronization

请查看以下代码:

A类

package generalscenarios;

public class A implements Runnable{

    public void run(){

        System.out.println("dsad");

    }

}

B类

package generalscenarios;


public class B {


    public static void main(String[] args) throws InterruptedException {

        A a1  = new A();
        Thread a = new Thread(a1);
        a.start();
        System.out.println("hi");
    }
}

当我执行B类时,我的线程a将由主线程启动,并且hi将由主线程打印在控制台上。但是印刷的顺序" hi"和" dsad"尚未确定。

我想要那个"嗨"应该在" dsad"。

之后打印

我想到的解决方案是在主线程和线程" a"之间采用共享变量。主线程将等待该变量,直到时间线程" a"通知他。

A类

package generalscenarios;

public class A implements Runnable{

    public void run(){

        System.out.println("dsad");
        synchronized (this) {
            this.notify();  
        }


    }

}

B类

package generalscenarios;


public class B {


    public static void main(String[] args) throws InterruptedException {

        A a1  = new A();
        Thread a = new Thread(a1);
        a.start();
        synchronized (a1) {
            a1.wait();
        }
        System.out.println("hi");
    }
}

如果我的想法有效,请建议我。请提出任何其他实现此目的的方法。

1 个答案:

答案 0 :(得分:6)

您可以尝试类似

的内容
public static void main(String[] args) throws InterruptedException {

    A a1  = new A();
    Thread a = new Thread(a1);
    a.start();
    a.join();
    System.out.println("hi");
}

请阅读Thread.join()并阅读Thread的完整参考资料。