SyncBlock.java Source code

Java tutorial

Introduction

Here is the source code for SyncBlock.java

Source

public class SyncBlock extends Object {
    private Object longLock;

    public SyncBlock() {
        longLock = new Object();
    }

    public void doStuff() {
        print("about to try to get exclusive access " + "to longLock");

        synchronized (longLock) {
            print("got exclusive access to longLock");
            try {
                Thread.sleep(10000);
            } catch (InterruptedException x) {
            }
            print("about to relinquish exclusive access to " + "longLock");
        }
    }

    private static void print(String msg) {
        String name = Thread.currentThread().getName();
        System.err.println(name + ": " + msg);
    }

    private static Thread launch(final SyncBlock sb, String name) {

        Runnable r = new Runnable() {
            public void run() {
                print("in run()");
                sb.doStuff();
            }
        };

        Thread t = new Thread(r, name);
        t.start();

        return t;
    }

    public static void main(String[] args) {
        try {
            SyncBlock sb = new SyncBlock();

            Thread t1 = launch(sb, "T1");
            Thread.sleep(500);

            Thread t2 = launch(sb, "T2");
            Thread t3 = launch(sb, "T3");

            Thread.sleep(1000);

            print("about to interrupt T2");
            t2.interrupt();
            print("just interrupted T2");

        } catch (InterruptedException x) {
            x.printStackTrace();
        }
    }
}