• Object 的wait()方法


    The java.lang.Object.wait() causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0).

    The current thread must own this object's monitor (例如同步代码块). The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.

    This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.

    public class TestWait
    {

    private List synchedList;

    public TestWait() {
    // create a new synchronized list to be used
    synchedList = Collections.synchronizedList(new LinkedList());
    }

    // method used to remove an element from the list
    public String removeElement() throws InterruptedException {
    synchronized (synchedList) {

    // while the list is empty, wait
    while (synchedList.isEmpty()) {
    System.out.println("List is empty...");
    synchedList.wait();
    System.out.println("Waiting...");
    }
    String element = (String) synchedList.remove(0);

    return element;
    }
    }

    // method to add an element in the list
    public void addElement(String element) {
    System.out.println("Opening...");
    synchronized (synchedList) {

    // add an element and notify all that an element exists
    synchedList.add(element);
    synchedList.add("test123");
    System.out.println("New Element:'" + element + "'");

    synchedList.notifyAll();
    System.out.println("notifyAll called!");
    }
    System.out.println("Closing...");
    }

    public static void main(String[] args) {
    final TestWait demo = new TestWait();

    Runnable runA = new Runnable() {

    public void run() {
    try {
    String item = demo.removeElement();
    System.out.println("" + item);
    } catch (InterruptedException ix) {
    System.out.println("Interrupted Exception!");
    } catch (Exception x) {
    System.out.println("Exception thrown.");
    }
    }
    };

    Runnable runB = new Runnable() {

    // run adds an element in the list and starts the loop
    public void run() {
    demo.addElement("Hello!");
    }
    };

    try {
    Thread threadA1 = new Thread(runA, "A");
    threadA1.start();

    Thread.sleep(500);

    Thread threadA2 = new Thread(runA, "B");
    threadA2.start();

    Thread.sleep(500);

    Thread threadB = new Thread(runB, "C");
    threadB.start();

    Thread.sleep(1000);

    threadA1.interrupt();
    threadA2.interrupt();
    } catch (InterruptedException x) {
    }
    }
    }

  • 相关阅读:
    C语言作业
    nrf52832(nrf52810)制作升级包出错及解决方法
    nrf52810的升级命令
    nrfutil生成的DFU设置十六进制文件未按字对齐
    Android CameraHal NativeWindow相关(一):从CameraHal::setPreviewWindow(struct preview_stream_ops *window)开始
    Android Camera 调用流程及调试
    Android MediaPlayer的核心原理
    Android MediaPlayer状态图明晰注释
    Android MediaPlayer状态机
    Android Camera Preview ANativeWindow的处理
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8669474.html
Copyright © 2020-2023  润新知