2.2.15内置类与同步:实验2

来源:互联网 发布:高中数学算法基本语句 编辑:程序博客网 时间:2024/06/16 22:31

本例同步代码synchronized(class2)对class2上锁之后,其他线程只能以同步的方式调用class2的静态方法。

package cha02.execise31;/** * Created by sunyifeng on 17/10/9. */public class OutClass {    //    static class InnerClass1 {        //        public void method1(InnerClass2 innerClass2) {            String threadName = Thread.currentThread().getName();            synchronized (innerClass2) {                System.out.println(threadName + "进入InnerClass1的method1");                for (int i = 0; i < 10; i++) {                    System.out.println("i=" + i);                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }                System.out.println(threadName + "离开InnerClass1的method1");            }        }        //        public void method2() {            String threadName = Thread.currentThread().getName();            System.out.println(threadName + "进入InnerClass1的method2");            for (int j = 0; j < 10; j++) {                System.out.println("j=" + j);                try {                    Thread.sleep(100);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            System.out.println(threadName + "离开InnerClass1的method2");        }    }    //    static class InnerClass2 {        //        public synchronized void method1() {            String threadName = Thread.currentThread().getName();            System.out.println(threadName + "进入InnerClass2的method1");            for (int k = 0; k < 10; k++) {                System.out.println("k=" + k);                try {                    Thread.sleep(100);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            System.out.println(threadName + "离开InnerClass2的method1");        }    }}

package cha02.execise31;/** * Created by sunyifeng on 17/10/9. */public class Run {    public static void main(String[] args) {        final OutClass.InnerClass1 in1 = new OutClass.InnerClass1();        final OutClass.InnerClass2 in2 = new OutClass.InnerClass2();        //        Thread t1 = new Thread(new Runnable() {            @Override            public void run() {                in1.method1(in2);            }        },"T1");        //        Thread t2 = new Thread(new Runnable() {            @Override            public void run() {                in1.method2();            }        }, "T2");        //        Thread t3 = new Thread(new Runnable() {            @Override            public void run() {                in2.method1();            }        }, "T3");        //        t1.start();        t2.start();        t3.start();    }}

输出结果:

T2进入InnerClass1的method2
T1进入InnerClass1的method1
j=0
i=0
i=1
j=1
i=2
j=2
i=3
j=3
i=4
j=4
i=5
j=5
i=6
j=6
i=7
j=7
j=8
i=8
j=9
i=9
T1离开InnerClass1的method1
T2离开InnerClass1的method2
T3进入InnerClass2的method1
k=0
k=1
k=2
k=3
k=4
k=5
k=6
k=7
k=8
k=9
T3离开InnerClass2的离开method1

原创粉丝点击