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

  • 相关阅读:
    Xcode 8.2 想使用插件 怎么办? 教你科学的使用插件
    JSAPI_Ticket签名
    Java中HashMap,LinkedHashMap,TreeMap的区别[转]
    微信支付开发,再次签名,APP调用
    微信支付开发,统一下单
    android studio安装插件
    java实现mysql数据库的备份及还原
    java项目中读取src目录下的文件
    eclipse增加浏览器chrome
    cd 命令
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8669474.html
Copyright © 2011-2022 走看看