java线程同步的问题,究竟线程在什么时候释放锁

代码如下:同步资源对象publicclassMyResource{publicsynchronizedvoidf(){..};publicsynchronizedvoid... 代码如下:
同步资源对象
public class MyResource{
public synchronized void f() {..};
public synchronized void g() {..};
public synchronized void h() {..};
}
线程同步访问方法
public static void main(String[] args) {
final MyResource rs = new MyResource();
new Thread() {
public void run() {
rs.f();
rs.h();
}
}.start();
new Thread() {
public void run() {
rs.g();
}
}.start();
}

此时实验结果的输出为(为什么输出结果顺序是f()-g()-h()而不是f()-h()-g()??线程1是否在调用rs.f()后就释放了对象锁?而不是顺序执行完run()方法继续执行rs.h()的所有代码?没太弄懂,求大神解释):
Thread-0:synchronized in f()
Thread-0:synchronized in f()
Thread-0:synchronized in f()
Thread-0:synchronized in f()
Thread-0:synchronized in f()
Thread-1:synchronized in g()
Thread-1:synchronized in g()
Thread-1:synchronized in g()
Thread-1:synchronized in g()
Thread-1:synchronized in g()
Thread-1:synchronized in h()
Thread-1:synchronized in h()
Thread-1:synchronized in h()
Thread-1:synchronized in h()
Thread-1:synchronized in h()
the lock(monitor) would be released automatically by the thread as soon as it (the thread) finishes executing the method (or block of code). 这里的method指的是run方法还是同步对象中的方法???? 搞定,根据括号中的(或是是同步块中的代码),这里肯定值的是对象中的同步方法,线程在执行完一个同步方法f()后则释放了同步锁,然后该锁被线程1拿到,执行完g(),然后再被线程0拿到,输出
Thread-0:synchronized in f()
Thread-1:synchronized in g()
Thread-0:synchronized in h()
展开
 我来答
百度网友3b602ae8cb
2014-08-11 · 超过34用户采纳过TA的回答
知道答主
回答量:81
采纳率:100%
帮助的人:74.2万
展开全部
可以肯定的说,执行完同步代码块 立即释放 而与run方法没有关系
你这个结果应该是随机的
f()执行完释放this锁,被哪个线程拿到是随机的
957816783
2014-08-11 · TA获得超过234个赞
知道答主
回答量:91
采纳率:100%
帮助的人:45.6万
展开全部
这样说吧,这个跟你的cpu也有关系的,一个线程并不是一直占用cpu的,假如一个线程需要执行5毫秒,排除其他线程的影响,那么现在有线程A和线程B两个线程,执行顺序可能是,A执行了2毫秒,B再执行2毫秒,A再两毫秒,接着B再执行,轮流执行,直到两个线程结束。这样出现上面的问题就不奇怪了,至于你说的同步锁,只是加在了方法上,如果给f()和h()一起加一个锁,就没问题了。还有,单核的和多核的cpu的输出结果也可能天差地别,如果处理g()的cpu空闲一点,有可能g()会先输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xkdxkdxkd
2014-08-11 · 超过28用户采纳过TA的回答
知道答主
回答量:112
采纳率:100%
帮助的人:63.6万
展开全部
你没有优先级的话,这几个线程是随即的 不一定按照你写的顺序进行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式