编码验证——类方法前,加上修饰符 synchronized,同步对象是当前类对象

代码示例:

public class Hreflect {

    public static void main(String[] args) {
        try {
test t=new test();
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

}
class test{
    public test() throws InterruptedException {
        Thread one=new Thread(new Runnable() {
            @Override
            public void run() {
                 test.method1();
            }
        });
        one.start();

        Thread two=new Thread(new Runnable() {
            @Override
            public void run() {
                test.method2();
            }
        });
        two.start();

        Thread three=new Thread(new Runnable() {
            @Override
            public void run() {
                test.method3();
            }
        });
        three.start();



    }
   static void method1()
    {
        synchronized (test.class)
        {
            System.out.println("我是类方法一但是方法里的synchronized修饰,执行5秒");
            try{
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
   static void method2()
    {
        try{
            System.out.println("类方法2无synchronized但是我也被执行了,执行5秒");
            Thread.sleep(5000);
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }
    static synchronized  void method3()
    {
        try{
            System.out.println("我是类方法被synchronized修饰,开始执行5秒");
            Thread.sleep(5000);
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }
}

编码验证——类方法前,加上修饰符 synchronized,同步对象是当前类对象

采用的线程同步对象来验证 类方法一保证占用当前对象来执行 因为要形成对比 类方法二没有加synchronized关键字 被执行是肯定的 为了验证类方法三,唯一同类方法二不同的是在其前面加上了synchronized关键字
如果类方法前,加上修饰符 synchronized,同步对象不是当前类对象
理应被执行 因为占用的同步对象不是当前类对象
但是其结果只是类方法二执行了 而且是等待类方法一释放才执行的 因此得出——类方法前,加上修饰符 synchronized,同步对象是当前所获取的类对象

上一篇:【Thread】线程的死锁与锁(四)


下一篇:面试题 所有的