+++ /dev/null
-// Test that monitor locks work and are recursive.
-// Origin: Bryce McKinlay <bryce@albatross.co.nz>
-
-class T implements Runnable
-{
- public int count = 0;
- Counter c;
-
- public T (Counter c)
- {
- this.c = c;
- }
-
- public void run()
- {
- while (true)
- {
- // NOTE: double-synchronization here.
- synchronized (c)
- {
- if (c.getCount() <= 100000)
- count++;
- else
- break;
- }
- }
- }
-}
-
-class Counter
-{
- int i = 0;
- public synchronized int getCount ()
- {
- return ++i;
- }
-}
-
-public class Thread_Monitor
-{
- public static void main(String args[])
- {
- Counter c = new Counter();
- T t1 = new T(c);
- T t2 = new T(c);
-
- Thread th1 = new Thread(t1);
- Thread th2 = new Thread(t2);
- th1.start();
- th2.start();
- try
- {
- th1.join();
- th2.join();
- }
- catch (InterruptedException x)
- {
- System.out.println("failed: Interrupted");
- }
- if (t1.count + t2.count == 100000)
- System.out.println ("ok");
- else
- System.out.println ("failed: total count incorrect");
- }
-}