关于synchronized的问题。
如果我在producer和consumer的run方法前也加上synchronized,会产生死锁情况,这是怎么回事啊?
//Producer 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(); } } } //Consumer public synchronized void run() { while(true) { queue.getN(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
?,多线程学的难受。
23
收起
正在回答
2回答
同学你好,
1、synchronized最常用于线程并发编程时线程的同步。在本课程的run方法中会调用set或get方法,生成或消费n,对变量flag和n进行改变,所以我们就需要将这2个方法进行同步。当程序中多个线程会对同一个变量进行修改的时候,我们需要使用synchronized关键字保证线程同步。
2、run方法是线程启动时要执行的方法,没有对程序中变量进行修改,所以该方法不需要同步。
如果问题没有解决,同学可以贴一下代码,方便老师检查。祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星