synchronized放置位置问题
为什么不能将synchronized放在Producer和Consumer类的run()方法中,如:
public synchronized void run() {
int i=0;
while(true) {
queue.setN(i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
synchronized不是在有线程执行这个方法时,其它线程不可调用吗,按理应该也能达到一样的效果啊
正在回答 回答被采纳积分+1
同学你好,
1、在java中,使用synchronized来表示加锁标记,在方法中加上synchronized,表示当前方法在某个对象获取调用这个方法时,加上锁标记,不允许其他对象来调用这个方法。在一个线程调用该方法时,直到方法中的代码运行完,其它线程才能调用这个方法。
2、线程执行是根据获取到CPU时间片后就可以执行,当CPU时间片所在的时间片到期后,就可能被其他线程抢到CPU时间片执行线程。 所以线程运行是随机的,它并不是必须等线程1运行完了,再来运行线程2。
期间不是方法中的代码执行完,cpu才会切换给其他的线程使用,而是当CPU时间片到期后,当前线程会进入就绪状态,等待cpu再次分配时间片资源来继续执行方法中的代码。
3、同学可以参考下面的问答
https://class.imooc.com/course/qadetail/248977
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星