日期:2014-05-20  浏览次数:20774 次

线程问题,求大虾讲解
当访问synchronized方法时,表示将该对象上锁,还是该方法上锁

------解决方案--------------------
该对象
在当前方法结束之前,其中的所有同步方法都不能被其他线程访问了
------解决方案--------------------
个人理解:
其实是某个线程执行synchronized方法时,要保证没有其他线程在执行这一方法。
那么线程调度怎么知道这个synchronized方法是否在用的?就是根据这个synchronized方法使用的同步对象。
(根据这个对象,线程调度制作了一个锁旗标。)
假如有个线程要执行这个方法,那么线程调度要先看看这个锁旗标是否空闲,如空闲就把锁旗标给这个线程,
这个线程就可以执行这个synchronized方法了;如果锁旗标不空闲,线程调度会把这个线程放在等待池里,
等待锁旗标。(这样,每次只有一个线程能执行synchronized方法)。
当那个得到锁旗标的线程执行完后,会释放锁旗标。线程调度会把锁旗标给正在等待池中等待的线程。
楼主那样提问,似乎也不是很严谨。
表达的不一定清楚,希望对楼主有帮助。

------解决方案--------------------
楼主可以这样试着给你的同事证明:
1同步静态方法,它标识在整个类上面:A.class
2将实例同步方法变成方法上的同步代码块:
public void synchronized doit(){};变为public void doit(){synchronized(this){};

------解决方案--------------------
应该是方法吧
------解决方案--------------------
只有Object才有锁,锁信息就保存在对象中
------解决方案--------------------
自然是方法. 不过锁标识用的是对象. 锁住的是方法.等同于

synchronized(this){
//......
}
------解决方案--------------------
锁 是针对对象来说的,方法中加synchronized 只说明在多个线程下面,多个线程调用这个时需要对象锁,其他的方法不用。
------解决方案--------------------
是对象
------解决方案--------------------
对象...
------解决方案--------------------
我说的不对 应该是对象而不是方法 对于一个特定的对象来说其所有的synchronized方法共享一个锁 即该对象的锁
------解决方案--------------------
从现象看~锁的是对象中的同步方法~~~~~~同对象的非同步方法是不会锁的
------解决方案--------------------
synchronized如果修饰的是实例方法,则锁住的是在不同线程中企图执行该方法或者其它同步方法的同一个对象

如果修饰的是静态方法,则锁住的是该类所有的企图执行该方法的对象(或者就理解成锁住了这个方法也行)。
------解决方案--------------------
好比一个方法要用来处理一个人:当线程1刚刚把nameg改为李四但还没来得及把age该为30时,他的时间片已经到了,要回到ready队列中就绪,对此线程2登场把name和age都读取了,则读取的age时错的,为了解决这种问题就可以用了
------解决方案--------------------
个人没理解,纯顶
------解决方案--------------------
虽然是给对象方法上的锁,但是实际上锁的是对象,而不是对象的方法。只有对象才有锁的概念。
------解决方案--------------------
对象啊 这个是肯定的
------解决方案--------------------
http://javacrazyer.iteye.com/blog/759300讲的很详细
------解决方案--------------------
是给synchronized块里的代码上锁