关于java中的多线程机制中的synchronized关键字
类锁:
当t1线程调用了使用synchronized修饰的静态方法的话,就会占用该类的类锁,这时如果别的线程也想要调用该类的别的使用了synchronized修饰的静态方法的话,就需要等待t1线程的结束然后才可以占用该类的类锁。
注意:如果t1线程已经占用了该类的类锁的话,别的线程也想占用该类的类锁就需要等待t1线程的占用结束,
这段代码执行的时候没有任何对象的介入,所以即使t2线程又new了一个该类新的对象然后再通过该对象调用
该类的使用synchronized修饰的静态方法的话,依然需要等待,因为调用静态方法的时候不需要对象的介入。
对象锁:
当t1线程想要调用一个类中使用了synchronized修饰的实例方法的话,那么就需要找到该类的对象锁,如果找到了该对象的锁的话就会进行占用,这时如果别的线程调用该对象别的使用了synchronized修饰实例方法或该方法的话,也会去寻找该对象的锁但是该对象的锁已经被t1占用,它必须等待t1的代码执行完毕之后,然后归还该对象的锁,它才可以进行占用。
注意:要区分好对象锁和类锁,如果一个线程调用了t1类中使用synchronized修饰的实
例方法,另一个线程调用了使用synchronized修饰的静态方法,它们两个之间是不会影
响到对方的,因为一个占用的是类锁(没有对象的介入),另一个占用的是对象锁。
本人第一次写博客,写的不好望各位多多包含,感谢。