Java中synchronized关键字如何解析实例以避免线程安全问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2317个文字,预计阅读时间需要10分钟。
首先回顾一下synchronized的基本使用:使用+synchronized代码块,被修饰的代码段成为同步语句块,其作用域是调用这个代码块的对象实例。在执行这个代码块时,同一时刻只能有一个线程访问,其他线程会等待当前线程执行完毕。我们使用synchronized关键字时,可以缩小代码段的范围,以减少同步的开销。
首先来回顾一下synchronized的基本使用:
- synchronized代码块,被修饰的代码成为同步语句块,其作用的范围是调用这个代码块的对象,我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步。这叫减小锁的粒度,使代码更大程度的并发。
- synchronized方法,被修饰的方法成为同步方法,其作用范围是整个方法,作用对象是调用这个方法的对象。
- synchronized静态方法,修饰一个static静态方法,其作用范围是整个静态方法,作用对象是这个类的所有对象。
- synchronized类,其作用范围是Synchronized后面括号括起来的部分synchronized(className.class),作用的对象是这个类的所有对象。
- synchronized() ()中是锁住的对象, synchronized(this)锁住的只是对象本身,同一个类的不同对象调用的synchronized方法并不会被锁住,而synchronized(className.class)实现了全局锁的功能,所有这个类的对象调用这个方法都受到锁的影响,此外()中还可以添加一个具体的对象,实现给具体对象加锁。
synchronized (object) { //在同步代码块中对对象进行操作 }
synchronized关键字与线程安全
以为用了synchronized关键字包住了代码就可以线程同步安全了。测试了下。发现是完全的错了。synchronized必须正确的使用才是真正的线程安全。。。
本文共计2317个文字,预计阅读时间需要10分钟。
首先回顾一下synchronized的基本使用:使用+synchronized代码块,被修饰的代码段成为同步语句块,其作用域是调用这个代码块的对象实例。在执行这个代码块时,同一时刻只能有一个线程访问,其他线程会等待当前线程执行完毕。我们使用synchronized关键字时,可以缩小代码段的范围,以减少同步的开销。
首先来回顾一下synchronized的基本使用:
- synchronized代码块,被修饰的代码成为同步语句块,其作用的范围是调用这个代码块的对象,我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步。这叫减小锁的粒度,使代码更大程度的并发。
- synchronized方法,被修饰的方法成为同步方法,其作用范围是整个方法,作用对象是调用这个方法的对象。
- synchronized静态方法,修饰一个static静态方法,其作用范围是整个静态方法,作用对象是这个类的所有对象。
- synchronized类,其作用范围是Synchronized后面括号括起来的部分synchronized(className.class),作用的对象是这个类的所有对象。
- synchronized() ()中是锁住的对象, synchronized(this)锁住的只是对象本身,同一个类的不同对象调用的synchronized方法并不会被锁住,而synchronized(className.class)实现了全局锁的功能,所有这个类的对象调用这个方法都受到锁的影响,此外()中还可以添加一个具体的对象,实现给具体对象加锁。
synchronized (object) { //在同步代码块中对对象进行操作 }
synchronized关键字与线程安全
以为用了synchronized关键字包住了代码就可以线程同步安全了。测试了下。发现是完全的错了。synchronized必须正确的使用才是真正的线程安全。。。

