java 中的 synchronized 是如何实现的, 原理是什么?

解决方案 »

  1.   

    应该是控制内存中的代码片段,用synchronized作为标记
      

  2.   

    类或者对象有锁,基于锁的synchronized机制
      

  3.   

    没人气啊,那好吧,换种方式如果不同synchronized关键字 怎么实现同步的功能或者说怎么实现锁
      

  4.   

    java的同步机制是基于对象锁机制。每个对象都有一个锁的属性(应该是一段内存块),JAVA称它为对象监视器。
    内部的具体实现是JVM调用硬件支持(CPU指令等)做到对加减锁的原子操作。
    当调用synchronized(obj){代码段}时都会去检查这个obj是否已经被其他线程锁上。如果已锁上,本线程就会处于等待状态,直到其它线程释放,而本线程取得这个对象锁以后才会去执行里面的代码段。当执行完代码段以后就会释放这个对象锁。
    你也可以在代码段里面调用wait和notify或notifyAll方法来实现线程之间的同步。
    调用wait方法当前线程等待并释放该对象锁。
    调用notifyAll将通知其他正在等待该OBJ的线程,一旦该线程释放该对象锁,其中的一个线程能够获得该对象锁从而继续执行代码段里wait以后的代码。