多线程经典面试题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StillOnMyWay/article/details/76652659
经典面试题: 三个线程循环打印出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();
            }
        }

猜你喜欢

转载自blog.csdn.net/StillOnMyWay/article/details/76652659