java - Java中的多线程

标签 java multithreading

我有一个 main 方法,类似:

A a = new A();
a.start();

B b = new B();
b.start();

B 处理 a.start 创建的文件,因此 a.start() 必须先完成。但是, a.start() 运行多线程作业,并在完成之前执行 b.start()。

  1. 为什么启动 a.start() 的主线程在完成之前退出该方法?
  2. 有什么好方法可以确保 b.start() 不会在 a.start() 完成之前启动?

谢谢!

最佳答案

看起来你根本不需要在单独的线程中执行这些任务,但如果你真的想要,你可以这样做:

A a = new A();
a.start();
a.join(); // Will wait until thread A is done

B b = new B();
b.start();
b.join(); // Will wait until thread B is done

假设 A 和 B 是 Thread 的子类,不鼓励实现 Runnable 并使用 new Thread(Runnable).start()。

更好的方法是使用执行器并让 A 和 B 实现 Runnable(而不是扩展线程)。像这样:

ExecutorService ex = Executors.newSingleThreadExecutor();
ex.execute(new A());
ex.execute(new B());

A 和 B 现在将在单独的线程上顺序执行。

关于java - Java中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746338/

相关文章:

java - 在不使用线程的情况下处理 EJB3 中的超时

java - 程序将按降序输出三个整数

java - HashMap,获取时可能是原子的,并且保证键已经完全放入

python - 在多处理中使用队列返回值的替代方法

java - 从 CyclicBarrier 中排除特定线程

java - 在另一个 Synchronized 中调用 Synchronized

java - 使用 JAVA 将 AES 对称 key 作为字符串传递

java - String.split() 不作用于分号或空格定界符

java - Java 中的标点正则表达式

java - 在一个线程中实现多个线程最有效的方法是什么?