java中synchronized的理解

含义:

synchronized是Java中的关键字,是一种同步锁。在多线程操作的时候,使用这个Java关键字可以对对象加锁,当次线程执行完成以后,其他线程才能执行这个事件。

用法:

1.修饰代码块:synchronized(this),被修饰的代码块成为同步代码块,作用对象是调用这个代码块的对象。
一个线程访问一个对象中的synchronized(this)同步代码块时,其他线程试图访问该对象的线程将被阻塞。当不同线程访问不同对象中的代码块时,两个线程可以同时执行
当一个线程访问对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该对象中的非synchronized(this)同步代码块,而不受阻塞
2.修饰一个方法:同步方法,作用对象是调用这个方法的对象,不能被继承,也就是说子类复写了父类,但是子类的方法默认并不同步。
3.修饰静态方法:作用对象是这个类的所有对象,和修饰类是一样的效果。
4.修饰一个类:作用对象是这个类的所有对象
5.修饰一个对象:
当一个线程访问一个加锁对象时,其他试图访问该对象的线程将会阻塞,直到该线程访问该对象结束。也就是说谁拿到那个锁谁就可以运行它所控制的那段代码。
当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的对象来充当锁,零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。

你可能感兴趣的:(java中synchronized的理解)