2012-04-17 59 views
0

我已经开发了java线程上的下面的程序,我有两个线程正在执行并访问run()中的方法,现在如果我想先开始第一个线程然后开始第二个线程通过同步机制,但如果我想第一个线程结束,然后再开始)第二个线程,可能是实现通过连接(请告诉我如何能够通过实现加入来完成,关于线程的加入

public class MyThread2 extends Thread { 


public void run() 
{ 

    //synchronized (this) 
    //{ 
    //System.out.println(Thread.class); 
    for(int i=0;i<20;i++) 
    { 
     try{ 

      Thread.sleep(500); 
      System.out.println(Thread.currentThread().getName()); 
     System.out.println(i +"\n"+ ".."); 
     }catch(Exception e) 
     {e.printStackTrace(); 
     } 
    } 
    //} 

}

public static void main(String... a) 
{ 
    MyThread2 obj = new MyThread2(); 

    Thread x = new Thread(obj); 
    x.setName("first"); 
    x.start(); 

    Thread y = new Thread(obj); 
    y.setName("second"); 
    y.start(); 




} 
+0

如果你想在开始第二个线程之前结束第一个线程,为什么你要使用线程呢?这只是一种接一种地调用两种方法的复杂方式。 – EJP 2012-04-17 05:58:11

回答

1
x.start(); 
x.join(); 
y.start(); 

但你应该认识到,这是完全没有意义的,根据我上面的评论。如果你想要的顺序执行所有你需要的是:

x.run(); 
y.run(); 

,你不需要任何人来扩展Thread

+0

嗨EJP,非常感谢,它的工作,现在我的第一个线程开始,然后完成第二个线程开始,请再次解释一点,由x.start()发生了什么; x.join(); y.start(); 我所掌握的是第一个x线程开始并在它完成之后y线程开始,请expalin一点点 – dghtr 2012-04-17 06:08:16

+0

'start()'启动线程。按照Javadoc,join()将它加入当前线程:当前线程一直等到目标线程完成。 – EJP 2012-04-17 06:29:25

0

如果您希望作业按顺序运行,则无需扩展线程。但是如果你想控制线程执行的顺序,那么你可以尝试为线程设置优先级。

//Setting priorities on the Thread objects 
    x.setPriority(Thread.MAX_PRIORITY); 
    y.setPriority(Thread.MIN_PRIORITY); 

如果我们设置线程的优先级,我们仍然没有得到执行的精确控制,但至少我们可以告诉我们一个我们认为是 最重要的

希望这有CPU帮助你。

+0

嗨,这是不能保证它是在做什么,它是先运行,然后立即运行第二个和周期是这样的,我正在寻找第一个线程将完成它的任务,然后第二个线程应该开始作为一个新的..! !反正谢谢你的帮助..! – dghtr 2012-04-17 06:19:47