简体   繁体   中英

Resuming a thread by using notifyAll

Take the Pausing a Thread example. If I use notifyAll instead of notify, is there any side effect, and is it necessary?

In that example, it will not make any difference, because there's only 1 thread waiting.

The difference between notify and notifyAll is that the latter wakes all waiters, instead of just one.

在“ 有效的Java”项目69中,Bloch建议“ 始终使用notifyAll ”。

Using notifyAll as opposed to notify is important if you can have multiple parties waiting on the object. If only one thread ever waits, then there is no difference between calling notify vs notifyAll.

Create a new runnable. In the run method "start" countdownlatch is waiting and will not allow execution unless it is released using calling countdown on that latch for a predefined time. In this case 1. (since start is passed 1 as concurrent no)

// Revised Answer. // A runnable class.

public  class WorkerThread implements Runnable
    {
        CountDownLatch start;

        CountDownLatch end;

        String name;

        WorkerThread(CountDownLatch startLatch, CountDownLatch stopLatch)
        {
            this.start = startLatch;
            this.end = stopLatch;

        }

        public void run()
        {
            try
            {

                start.await();
            } catch (InterruptedException ex)
            {
                ex.printStackTrace();
            }
            System.out.println("Will run when start is released ");
            end.countDown();
        }
    }

// This is the entry point method that executes the worker thread.

public  void  initiateProcess (final int count) {
           CountDownLatch start = new CountDownLatch(1);
        CountDownLatch stop = new CountDownLatch(count);
        for (int i = 0; i < count; i++)
        {
            new Thread(new WorkerThread(start, stop))
                    .start();
        }
        System.out.println("Go");
// This is where start latch is released. Now worked thread can complete its function.
        start.countDown();
        try
        {


 // Stop will wait until stop latch is countdowned to zero from count param. (see count param)
            stop.await();
        } catch (InterruptedException ex)
        {
            ex.printStackTrace();
        }
        System.out.println("Finished");
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM