synchronized

作者: X兄 | 来源:发表于2019-03-04 17:30 被阅读15次

    synchronized介绍:

    synchronized ,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。

    当第一个线程执行代码的时候就拿到这个锁,并读锁定这把锁,直到方法结束和一定条件后才进行释放这把锁,在释放这把锁之前,其他的线程只能等待,只有释放了,其他的线程才依次与执行。

    使用synchronized是保证高并发安全,那么不使用synchronized会出现什么情况呢?

       我们举个简单的案例:

    结果:每次运行的值都是不一样的 ,这就说明出了问题。ru

    1.synchronized的作用? 

    能够保证在统一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

    synchronized关键字是并发编程的必学内容。

    2.synchronized的两个用法:

       ①. 对象锁

            方法锁(默认锁对象为当前this实例对象)    

            同步代码块锁(自己指定锁对象)

       ②.类锁 

            当synchronized修饰静态的方法或指定锁为class对象


    举例1:   对象锁的this

     结果:

    可以看出在Thread-0结束的时候才允许Thread-1的.

    举例2: 自己指定锁对象

    在上一个的基础上,创建一个Object对象 Object lock =new Object();然后把synchronized (this) this改为lock

    其结果和用this是一样的,那么你肯定会有疑问,我们什么时候用this,什么时候用object呢?

    当我们的synchronized (lock)代码块有多个时,这时候我们需要使用自定义锁对象

    相关文章

      网友评论

        本文标题:synchronized

        本文链接:https://www.haomeiwen.com/subject/tsbbuqtx.html