同时执行成对线程

时间:2014-05-15 21:04:00

标签: java multithreading synchronization java.util.concurrent

class A
{
    public void func()
    {
        new Thread()
        {
            public void run()
            {
                // statements
            }
        } .start();
        new Thread()
        {
            public void run()
            {
                // statements
            }
        } .start();
        new Thread()
        {
            public void run()
            {
                // statements
            }
        } .start();
        new Thread()
        {
            public void run()
            {
                // statements
            }
        } .start();
    }
}

在这里,我尝试前两个线程(比如对A)并发运行,接下来的两个线程(比如对B)只有在对A完成执行后才能并发运行。

此外,如果有人可以解释是否可以通过 java.util.concurrent threadgroup 来实现。我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用CountDownLatch等待一定数量的线程调用countDown(),此时主线程可以继续。你将不得不对你的线程进行一些改动 - 也就是说,你需要将它们传递给它们,当你完成它们的工作时你需要让它们调用latch.countDown(),这样闩锁的计数就会最终达到0。

所以你的主要课程看起来像是:

final CountDownLatch latch = new CountDownLatch(2); // Making this final is important!
// start thread 1
// start thread 2
latch.await(); // Program will block here until countDown() is called twice
// start thread 3
// start thread 4

你的主题看起来像是:

new Thread() {
    public void run() {
        // do work
        latch.countDown()
    }
}

只有前两个线程完成后,锁存器才允许主线程继续并启动另外两个线程。

答案 1 :(得分:0)

public void func()
{
    Thread a = new Thread()
    {
        public void run()
        {
            // statements
        }
    }
    Thread b = new Thread()
    {
        public void run()
        {
            // statements
        }
    }
    a.start();
    b.start();
    a.join();  //Wait for the threads to end();
    b.join();
    new Thread()
    {
        public void run()
        {
            // statements
        }
    } .start();
    new Thread()
    {
        public void run()
        {
            // statements
        }
    } .start();
}