android

synchronized

2019-03-04  本文已影响15人  X兄

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)代码块有多个时,这时候我们需要使用自定义锁对象

上一篇下一篇

猜你喜欢

热点阅读