Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时启动和终止线程_Java_Multithreading - Fatal编程技术网

Java 同时启动和终止线程

Java 同时启动和终止线程,java,multithreading,Java,Multithreading,我想同时启动两个线程t1和t2,每个线程调用System.out.println()打印到控制台,然后同时完成 请告知如何通过executor框架实现这一点。我正试图在executor框架本身的帮助下完成它 您可以使用2countdownlockes或CyclicBarrier来执行此操作。例如: final CountDownLatch start = new CountDownLatch(2); final CountDownLatch end = new CountDownLatch(2)

我想同时启动两个线程t1和t2,每个线程调用
System.out.println()
打印到控制台,然后同时完成


请告知如何通过executor框架实现这一点。我正试图在executor框架本身的帮助下完成它

您可以使用2
countdownlock
es或
CyclicBarrier
来执行此操作。例如:

final CountDownLatch start = new CountDownLatch(2);
final CountDownLatch end = new CountDownLatch(2);

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        try {
            start.countDown();
            start.await();
            System.out.println("In 1");
            end.countDown();
            end.await();
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt(); //restore interruption status
        }
    }
};
Runnable r2 = new Runnable() {
    @Override
    public void run() {
        try {
            start.countDown();
            start.await();
            System.out.println("In 2");
            end.countDown();
            end.await();
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt(); //restore interruption status
        }
    }
};

您可以使用2
countdownlock
es或
CyclicBarrier
来执行此操作。例如:

final CountDownLatch start = new CountDownLatch(2);
final CountDownLatch end = new CountDownLatch(2);

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        try {
            start.countDown();
            start.await();
            System.out.println("In 1");
            end.countDown();
            end.await();
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt(); //restore interruption status
        }
    }
};
Runnable r2 = new Runnable() {
    @Override
    public void run() {
        try {
            start.countDown();
            start.await();
            System.out.println("In 2");
            end.countDown();
            end.await();
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt(); //restore interruption status
        }
    }
};

+我是个好人。请考虑总是用你的<代码>中断中断>代码>(例如退出或重新中断)来做一些事情,以免忘记和忘记心理。是的,绝对是OP需要对
InterruptedException
执行一些操作,很可能只是重置中断状态并退出。我是这样编辑的。@assylias Thanx dude,请告诉我如何通过executor框架实现同样的功能@我不知道你在问什么。只需将runnables提交给你的遗嘱执行人…+1个好人。请考虑总是用你的<代码>中断中断>代码>(例如退出或重新中断)来做一些事情,以免忘记和忘记心理。是的,绝对是OP需要对
InterruptedException
执行一些操作,很可能只是重置中断状态并退出。我是这样编辑的。@assylias Thanx dude,请告诉我如何通过executor框架实现同样的功能@我不知道你在问什么。只需将runnables提交给你的执行人……你能编辑你的帖子来解释你为什么要这么做吗?这是家庭作业问题还是什么?你试过什么了吗?如果是的话,让我们看看!你能编辑你的帖子来解释你为什么要这么做吗?这是家庭作业问题还是什么?你试过什么了吗?如果是的话,让我们看看!