1 每一个object都有一个好像属性一样的东西(monitor),如果你的class里面有多个方法是被synchronized的话,如果这个class的一个synchronized 方法被一个线程调用的话,必须等这个方法被释放之后才可以调用这个class的其他synchronized 方法,这个是对于同一个线程来说,对于两个以上线程的话,也必须等第一个线程释放之后,第二个线程才两调用,对吧2. 同一个class里面所有的synchronized的是公用一个monitor?我的理解是monitor是对象,而且他有一个count的私有变量,当每次class被同一个线成调用的时候,他的count就加1,相反,如果线程释放一次的话,count就减少1问题:
如果我的class里面有连个方法a和b,他们都是synchronized,而且,如果a里面对b进行了调用的话,a,能成功调用吗? 我的理解: 如果能调用成功的话,那说明monitor里面的count加1了,但是如果不成功的话,说明:
必须等这个方法被释放之后才可以调用这个class的其他synchronized 方法.反正我觉得很矛盾,请高手帮忙.
如果我的class里面有连个方法a和b,他们都是synchronized,而且,如果a里面对b进行了调用的话,a,能成功调用吗? 我的理解: 如果能调用成功的话,那说明monitor里面的count加1了,但是如果不成功的话,说明:
必须等这个方法被释放之后才可以调用这个class的其他synchronized 方法.反正我觉得很矛盾,请高手帮忙.
解决方案 »
- 多个JTextField用DocumentListener监听,怎么返回触发事件控件引用
- 请问一下Vector类中toArray()函数的作用
- 初学者的小问题 呵呵~~
- 关于打印的问题!
- 一个程序问题!问题出在哪里???
- 一段很简单很简单的jdbc源码,但就是有问题!!!
- 加了按键或其他后,为什么APPLET程序生成的HTML在JBUILDER8中可以看到有变化,而在外面用浏览器看却没变化呢?出现了出现了class united.
- 如何用JAVA 将一个目录(包括子目录)下所有的文件名列出来呀,举个例子,d:\java\
- 我喜欢java的思想和编程模式,能谈一下你们喜欢java的理由吗?
- 一个语法问题
- 一个初级问题
- java高级软件工程师(诚招)
monitor并不是针对class的,而是针对object的,每个对象都有一个monitor。对同一个对象的多个同步方法的访问:“对于两个以上线程的话,也必须等第一个线程释放之后,第二个线程才两调用,对吧”这句话是对的。
第二个的理解是有问题的,一个线程拥有了某个对象的同步锁之后,其他的线程就无法获得它的同步锁,进入等待队列,这也是notify()和notifyall()两个方法工作的原理。他们是在等待队列中去唤醒其他线程的,与该对象无关的线程是不会被唤醒的。
所以你的问题的答案是能够调用成功,但原因和你的理解是不一样的。
上面的回答可能也有问题,等楼下的补充吧。
语句的同时不可能同时执行方法b的,所以synchronized是用于多线程环境的。