zoukankan      html  css  js  c++  java
  • 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) {
    }
    }
    }

  • 相关阅读:
    js全选,全不选,反选练习
    linux查看系统的一些命令,留着用
    JAVA中native方法
    应该被记住的 8 位 Java 人物
    iframe里面的iframe无法左右对齐的解决方法
    sql语句,查找合并后的结果
    地址路径过深时的处理方式
    惠普中国CEO孙振耀退休感言
    js获得readOnly属性
    直接加载错误页面void com.opensymphony.xwork2.ActionSupport.addActionError(String anErrorMessage)
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8669474.html
Copyright © 2011-2022 走看看