如何控制两个线程的run方法的执行顺序?

时间:2018-05-19 00:38:13

标签: java multithreading

运行此代码会提供以下输出:

 Name of t1:Thread-0
  Name of t2:Thread-1
  id of t1:8
  running...
  After changing name of t1:Sonoo Jaiswal
  running...

最后一次"正在运行......"字符串不能在第一次"运行后打印..."串? 这是代码 -

class TestJoinMethod3 extends Thread{
  public void run(){
   System.out.println("running...");
  }
 public static void main(String args[]){
  TestJoinMethod3 t1=new TestJoinMethod3();
  TestJoinMethod3 t2=new TestJoinMethod3();
  System.out.println("Name of t1:"+t1.getName());
  System.out.println("Name of t2:"+t2.getName());
  System.out.println("id of t1:"+t1.getId());

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

  t1.setName("Sonoo Jaiswal");
  System.out.println("After changing name of t1:"+t1.getName());
 }
}

2 个答案:

答案 0 :(得分:1)

没有控件。

就这么简单。线程首先是彼此独立的。因此,无法预测事情发生的确切顺序。

如果你需要控制你的线程进展的方式,你必须研究如何实现这一点(可能是"发生在"关系或同步之前)例如)。

答案 1 :(得分:0)

  

在第一次“运行...”字符串之后,是否应该打印最后一个“正在运行的...”字符串?这是代码 -

不一定。线程在后台独立运行,很难预测它们何时运行以及它们之间的时间间隔。如果您多次运行程序,您应该看到不同版本的输出。

线程的重点是这种异步操作。如果一个线程在一些IO上阻塞,那么其他线程可以在后台运行处理其他信息。这就是多线程程序的强大功能。如果你想控制它们以便它们以某种顺序吐出消息,那么你也可以在同一个线程中运行。