synchronized关键字加到static静态方法上是给Class类上锁,简称类锁(锁的事当前类的字节码)
而加到非static静态方法是给对象加锁
为了验证不是同一个锁 验证代码如下
package com.test.Thread.t10; /** * @author admin * 2017年4月20日 */ public class Service { synchronized public static void printA(){ try { System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 进入pringA()"); Thread.sleep(3000); System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 离开pringA()"); } catch (Exception e) { e.printStackTrace(); } } synchronized public static void printB(){ try { System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 进入printB()"); System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 离开printB()"); } catch (Exception e) { e.printStackTrace(); } } // synchronized public void printC(){ // try { // System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 进入printC()"); // // System.out.println("线程名称为:"+Thread.currentThread().getName()+"在 "+System.currentTimeMillis()+" 离开printC()"); // } catch (Exception e) { // e.printStackTrace(); // } // } public static void main(String[] args) { Service s=new Service(); ThreadA a=new ThreadA(s); a.setName("A"); a.start(); ThreadB b=new ThreadB(s); b.setName("B"); b.start(); // // ThreadC c=new ThreadC(s); // c.setName("C"); // c.start(); } } class ThreadA extends Thread{ private Service s; public ThreadA(Service s) { super(); this.s = s; } @Override public void run() { s.printA(); } } class ThreadB extends Thread{ private Service s; public ThreadB(Service s) { super(); this.s = s; } @Override public void run() { s.printB(); } } // //class ThreadC extends Thread{ // private Service s; // // public ThreadC(Service s) { // super(); // this.s = s; // } // @Override // public void run() { // s.printC(); // } //}
运行结果如下
同步效果执行,执行后在执行第二个 如果加到非static方法就不一样了 是异步的效果
放开注释的部分代码 再次运行 效果如下
这里异步的原因是因为持有不同的锁,一个是对象锁 ,一个是class锁 而calss锁可以对类的所有实例起作用
转载: https://blog.csdn.net/u010391342/article/details/70258159