• 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) {
    }
    }
    }

  • 相关阅读:
    子库存安全性控制
    检查装配件属性
    检查加工费是否有父件
    检查委外货位
    只允许操作外协任务
    检查是否存在工艺路线
    不能取组织ID
    加宽任务号宽度
    采购订单供应商地点必输
    只显示标准采购订单
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8669474.html
Copyright © 2020-2023  润新知