1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| package com.Thread;
public class ThreadTest { private static Object lockedObject = new Object(); public static class WaitRunner implements Runnable{
@Override public void run() { synchronized (lockedObject){
System.out.println("locked object monitor enter"); try { lockedObject.wait(2000); } catch (InterruptedException e) { e.printStackTrace(); }
System.out.println("locked object get monitor again");
} } } public static class NotifyRunner implements Runnable{
@Override public void run() { synchronized (lockedObject) { System.out.println("notify locked object monitor enter"); lockedObject.notifyAll(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("notify end"); } } }
public static void main(String[] args) { new Thread(new WaitRunner(),"wait").start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new NotifyRunner(),"notify").start(); } }
|