当前位置: 首页 > 面试题库 >

Java 如何同时启动两个线程

欧阳骏俊
2023-03-14
问题内容

程应在同一瞬间开始。我了解,如果你这样做thread1.start(),则下次执行之前需要花费几毫秒的时间thread2.start()

可能还是不可能?线程应该在同一瞬间开始。我知道,如果你执行thread1.start(),则下次执行thread2.start()需要几毫秒。

这是可能的还是不可能的?


问题答案:

要完全同时(至少尽可能好)启动线程,可以使用CyclicBarrier:

// We want to start just 2 threads at the same time, but let's control that 
// timing from the main thread. That's why we have 3 "parties" instead of 2.
final CyclicBarrier gate = new CyclicBarrier(3);

Thread t1 = new Thread(){
    public void run(){
        gate.await();
        //do stuff    
    }};
Thread t2 = new Thread(){
    public void run(){
        gate.await();
        //do stuff    
    }};

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

// At this point, t1 and t2 are blocking on the gate. 
// Since we gave "3" as the argument, gate is not opened yet.
// Now if we block on the gate from the main thread, it will open
// and all threads will start to do stuff!

gate.await();
System.out.println("all threads started");

这不必是CyclicBarrier,你也可以使用CountDownLatch

这仍然无法确保它们已正确启动

在其他平台上,确切地说启动线程可能是非常有效的要求。



 类似资料:
  • 我一直在尝试写一些java应用程序。这个应用程序想要运行的是处理一个文本文件。 但是,输入文本文件很大(超过200MB),我尝试将200MB拆分为四个拆分文件(每个50MB) 所以,每一个都只需要0.5秒,但是用这种线性运行,每一个也需要2秒。(worker1+0.5s,worker2+0.5s,worker3+0.5s,worker4)如果我可以同时运行4个线程,我预计这个应用程序只需要0.5秒

  • 一个常见的问题:我们可以启动同一个线程两次吗? 答案是:不可以! 启动线程后,将永远无法再次启动它。如果您这样做,则抛出IllegalThreadStateException异常。 让我们通过以下示例看看: 输出结果为:  

  • 问题内容: 我当前正在开发一个使用JDI连接到已经运行的“目标” java应用程序的“调试器” java应用程序。有什么方法可以让Ant启动目标应用程序,然后在第一个应用程序仍在运行时启动“调试器”? 是的,我知道我可以开发JDI应用程序来启动目标程序,但这不是我现在想要的。 问题答案: 您可以从Ant 并行 任务中生成两个Java程序。 第二个线程中的 睡眠 任务可以由 waitfor 条件替换

  • 我在理解诸如/和/ 我试图创建九个,并让它们同时运行,以找出哪个是最有效的。 因此,当主函数启动时,我会锁定互斥锁,以确保线程不会启动,然后再告诉它们使用pthread_lock( 然后,我使用各种调度策略创建所有九个线程。完成后,我尝试使用pthread\u mutex\u unlock告诉所有线程同时启动( 但当我运行这个时,它永远不会解锁线程。主功能的“运行…”print语句将关闭,但线程从

  • 问题内容: 是否可以同时在两个不同的元素上运行两个动画?我需要与此问题相反的Jquery排队动画。 我需要做这样的事情… 但要同时运行这两个。我唯一想到的就是为每个动画使用一次,但是我认为这不是最好的解决方案。 问题答案: 就在这里!

  • 我有一个情况,我需要启动两个线程一个接一个。我尝试了以下代码片段,在这里我可以启动Thread12,但不能启动Thread2。我怎样才能开始两个......?如何启动两个线程一个接一个...? 代码片段