多线程安全

在多线程的学习和使用中当我们在多个线程访问同一块代码块的时候为了保证每个线程在访问同一块代码块的使用里面的数据互不影响,我们在这了为了解决这个问题在共享代码块中加入锁操作.

  1.在共享代码块前面加上synchronized这个关键词.

  2.synchronized对选哪个锁操作

    1):申请对象锁

      1):持有对象锁的进入代码块

      2):执行代码块.

      3)执行完成之后推出代码块,归还对象锁.JVM会将竞争失败的线程唤醒,,唤醒的线程重新竞争对象锁

    2)对象锁竞争失败

      1)线程进入同步队列,进入堵塞状态

        JVM进行管理竞争失败的同步队列,进入堵塞状态  由运行态进入堵塞态  将堵塞的线程放入同步队列的数据结构中

        对象锁可以使用的时候在讲堵塞的线程唤醒

  3.对象 普通的java对象  类对象(JVM吧类当做对象来管理).

  4.注意事项:

      1):多个线程只有堆同一个对象申请对对象锁的时候才会出现同步互斥的现象.

      2):多个线程申请不同的对象锁的时候不会产生同步互斥的现象.

  5静态同步和实力同步否可以手写转换为同步代码块的写法.

 

  

posted @ 2020-05-21 09:43  哈哈,呵呵,嘿嘿  阅读(131)  评论(0)    收藏  举报