A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 黄云南 中级黑马   /  2012-3-23 01:39  /  1769 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. Object obj=new Object();
  2. synchronized(obj)
  3. {
  4.         需要被同步的代码,
  5. }
复制代码
同步代码块中传入的对像相当于一个锁,谁能告诉我锁实现同步的原理啊!

3 个回复

倒序浏览
本帖最后由 贠(yun)靖 于 2012-3-23 04:52 编辑

这问的太深了吧?  能看懂它的源代码就水平就不错了 搞清楚最底层的原理 这个难度对现在的我们来说太大了
       我只知道   对象所  也就是参数对象   当一个线程进来之前  它是某种状态 而这种状态时允许线程进来的
  当线程进来后  系统会自动改变这种状态  改变后 其他线程是进不来的      毕老师假设的是  -1和0  都是一样的道理
   至于具体怎么实现的  就不知道了
回复 使用道具 举报
我知道一种Java偏向锁定的原理,不知是否有帮助:
偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除它身上的偏向锁,将锁恢复到标准的轻量级锁。(偏向锁只能在单线程下起作用)
回复 使用道具 举报
01.Object obj=new Object();

02.synchronized(obj)

03.{

04.        需要被同步的代码,

05.}

那个obj就是同步监视器,当线程执行同步代码块之前,必须获得对同步监视器的锁定,任何时刻只有一条线程可以获得对同步监视器的锁定,当同步代码块执行结束后,该线程自然释放对该同步监视器的锁定。这是它大概的原理,置于它怎样实现的锁定和释放锁定的功能,这就是底层的实现了,我们现在还不需要知道,我们只是用别人提供的工具,置于这工具怎么造出来的,我们又不是做工具的,就不用关心了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马