一個對象都有一個對象鎖,那么如果兩個普通的方法同時去調用一個相同的對象(沒有synchronized該對象),要去獲取對象鎖才能進行操作嗎?還是直接就可進行操作?

解决方案 »

  1.   

    每给对象都有一把唯一的锁,每个对象中的方法可以加锁(通过synchronized加锁),也可以不加锁。
    可以加
      

  2.   

    如果其中一个对象加了锁了(synchronized)话就必须等它释放锁了。如果没加synchronized就没关系了。如果这个对象需要操作的是一个公用的资源的话就要考虑下加锁了。其他情况应该没影响
      

  3.   

    不用获取对象锁就可以直接操作,但是会产生数据不同步的问题,如果你要保证线程安全就必须这两个方法都加锁(加关键字synchronized),注意一定是两个方法都加锁(因为他们是互斥锁),只加一个方法另外一个不加还是会产生数据不同步问题滴~~~~~
      

  4.   

    给你一个应用场景某订单管理模块,新建订单保存时,需要首先获取单据号,此方法必须是synchronized方法,否则多个用户可能会获取到相同的单据号但是如果设置每个用户有自己独立的前缀和流水号管理器,则不需要同步锁,方法可以被同时多个线程访问生成各自的号如果流水号管理器公用一个,则还必须是synchronized方法用的时候无需关心是不是synchronized方法,直接用就可以了