2012-05-18 2 views
2

Пожалуйста, посмотрите на код ниже:Заказывая выполнение потоков в Java

класса А

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, My thread a будет запущен основной нитью, и hi будет напечатан на консоли основным потоком. Но порядок печати «привет» и «дсад» не определен.

Я хочу, чтобы «hi» следует печатать после «dsad».

Решение, о котором я думал, состоит в том, чтобы взять общую переменную между основным потоком и потоком «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"); 
    } 
} 

Пожалуйста, предложите мне, если мое мышление является действительным. Пожалуйста, предложите любой другой способ достижения этого.

+0

Вы можете посмотреть http://stackoverflow.com/questions/873237/synchronizing-two-threads - Thread.join() может быть просто билетом. – Ewald

+0

почему вы не присоединяетесь к теме? –

+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.

Смежные вопросы