java线程 wait notifynotifyAll必须在 synchronized中调用

    xiaoxiao2026-05-04  10

    //wait是释放锁,notify是唤醒其他调(用wait等待)的一个线程,不包括自己,notifyAll是唤醒所有线程包括自己

    public class Notify implements Runnable {     

             private String name;                private static Object s=new Object();      private Notify(String name) {              this.name = name;                  }               @Override         public void run() {                  synchronized (s)     {         for(int i=0;i<10;i++)         {                           s.notify();//选取启动的线程不包括本线程,即使本线程用wait终止,也就是说,要有别的线程来激活本线程           //激活最近的一个线程                    System.out.println(name+":"+i);                    try {         Thread.sleep(1000); s.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }           }                         }     }               public static void main(String[] args) throws Exception {                   Notify  pa = new Notify("A");              Notify pb = new Notify ("B");              Notify pc = new Notify("C");              Notify pd = new Notify("D");                                          new Thread(pa).start();           new Thread(pb).start();           new Thread(pc).start();         // new Thread(pd).start();               }      }    
    最新回复(0)