多线程经典面试题

来源:互联网 发布:宜宾县网络电视台 编辑:程序博客网 时间:2024/05/22 07:45
经典面试题: 三个线程循环打印出ABC各10次。 每个对象需要同时持有前一个对象的锁和自身的锁才可以打印,然后唤醒持有自己锁的下一个对象,再释放前一个对象的锁和执行权。

更详细的说明参考:http://www.cnblogs.com/GarfieldEr007/p/5746362.html (搞懂这个要花点小时间)

        import java.lang.Thread;        import java.lang.Runnable;        class ThreadDemo implements Runnable{            private String name;            private Object pre;       //前一个对象锁            private Object self;      //自身对象锁            ThreadDemo (String name, Object pre, Object self) {                this.name = name;                this.pre = pre;                this.self = self;            }            public void run () {                int num = 10;                while(num > 0 ) {                    synchronized (pre) {                        synchronized (self) {                                               System.out.print(name);                            num--;                            self.notify();                                          }                        try{                            pre.wait();                        } catch (Exception e) {                            e.printStackTrace();                        }                    }                }            }            public static void main(String[] args) {                Object a = new Object();                Object b = new Object();                Object c = new Object();                ThreadDemo r1 = new ThreadDemo("A", c, a);                ThreadDemo r2 = new ThreadDemo("B", a, b);                ThreadDemo r3 = new ThreadDemo("C", b, c);                Thread td1 = new Thread(r1);                Thread td2 = new Thread(r2);                Thread td3 = new Thread(r3);                td1.start();                try {Thread.sleep(100);} catch (Exception e) {}                td2.start();                try {Thread.sleep(100);} catch (Exception e) {}                td3.start();            }        }
原创粉丝点击