Java线程:如何同时执行语句
假设我有一个如下所示的run方法,我正在尝试为MyThread创建四个线程。语句1到3可以由线程同时运行,也可以以不同方式运行。但我希望语句4由线程同时执行。我可以在语句4之前汇集所有线程,并由所有线程同时执行语句4吗Java线程:如何同时执行语句,java,multithreading,Java,Multithreading,假设我有一个如下所示的run方法,我正在尝试为MyThread创建四个线程。语句1到3可以由线程同时运行,也可以以不同方式运行。但我希望语句4由线程同时执行。我可以在语句4之前汇集所有线程,并由所有线程同时执行语句4吗 class MyThread extends Thread { public void run() { //Statement 1 //Statement 2 //Statement 3 //Statement 4
class MyThread extends Thread
{
public void run()
{
//Statement 1
//Statement 2
//Statement 3
//Statement 4
}
}
有几种方法可以满足您的需求。也许最简单的方法是使用Java的实现。您可以定义一个(或多个)未来,它将在单独的线程上执行,阻塞直到它们全部完成,然后根据结果完成其他任务 有几种方法可以做你想做的事。也许最简单的方法是使用Java的实现。您可以定义一个(或多个)未来,它将在单独的线程上执行,阻塞直到它们全部完成,然后根据结果完成其他任务 使用CyclicBarrier,它最适合您的需求
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierUsage {
private static final int NUMBER_OF_THREADS = 2;
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(NUMBER_OF_THREADS);
Thread t1 = new Thread(new PrimaryParty(barrier));
Thread t2 = new Thread(new PrimaryParty(barrier));
t1.start();
t2.start();
}
}
class PrimaryParty implements Runnable {
private CyclicBarrier barrier;
public PrimaryParty(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
//Statement 1
//Statement 2
//Statement 3
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
//Statement 4
}
}
使用CyclicBarrier,它最适合您的要求
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierUsage {
private static final int NUMBER_OF_THREADS = 2;
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(NUMBER_OF_THREADS);
Thread t1 = new Thread(new PrimaryParty(barrier));
Thread t2 = new Thread(new PrimaryParty(barrier));
t1.start();
t2.start();
}
}
class PrimaryParty implements Runnable {
private CyclicBarrier barrier;
public PrimaryParty(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
//Statement 1
//Statement 2
//Statement 3
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
//Statement 4
}
}
我认为您对Java中的线程、并发性和同步有很大的误解。我会推荐你的。我现在能给你的唯一“答案”是预焙代码,你可以直接复制粘贴,但是你不会学到任何东西。是的,你可以。一种方法是使用类。创建一个计数为3的语句,在前三个线程的末尾倒数,然后等待第四个线程的计数达到零。你的意思是说,在所有线程都完成语句3之前,你不希望任何线程启动语句4吗?是的@DavidSchwartzI认为你对线程有很大的误解,Java中的并发和同步。我会推荐你的。我现在能给你的唯一“答案”是预焙代码,你可以直接复制粘贴,但是你不会学到任何东西。是的,你可以。一种方法是使用类。使用计数3创建它,在前三个线程中的每一个线程结束时倒计时,并等待它在第四个线程中达到零。您的意思是,在所有线程都完成语句3之前,您不希望任何线程启动语句4吗?是@DavidSchwartzThank you@PardeepDogra。它在示例项目中工作。让我试试实施。谢谢@PardeepDogra。它在示例项目中工作。让我试试。