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

  • 相关阅读:
    Android JSON解析
    相对靠谱的相册、拍照返回选择程序
    android strings.xml转义字符,注意细节解决
    设置progressBar 背景以及进度条
    Android Launcher简易Launcher开发
    android.os.NetworkOnMainThreadException 异常处理
    AspNetPager 多条件分页查询
    无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决
    DefaultButton Deal with users hitting ENTER on your forms
    Setup SSRS in SharePoint Integrated Mode
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8669474.html
Copyright © 2020-2023  润新知