本帖最后由 崔龙飞 于 2013-7-20 21:38 编辑
- class ThreadResource {
- public static void main(String[] args) {
- Resource r = new Resource();
- new Thread(new Input(r)).start();
- new Thread(new Output(r)).start();
- }
- }
- class Input implements Runnable{
- private Resource r;
- Input(Resource r) {
- this.r = r;
- }
- public void run() {
- int x = 0;
- while(true) {
- synchronized(r) {
- if(r.flag) // Res类里面flag已经定义为false,if(r.flag)里面的flag不也是false吗?
- //那么在Input'线程第一次运行时,就应该等待,赋值操作也不会运行。
- //老师说,flag第一次已经为false,所以就不需要等待,直接赋值。
- //感觉这里好矛盾啊,实在搞不懂了,看了几片帖子都没有解释清楚。
- //希望高手详细指点下flag的问题,多谢
-
- try{r.wait();}catch(Exception e){}
- if(x == 0) {
- r.name = "Mike";
- r.sex = "man";
- } else {
- r.name = "Lily";
- r.sex = "woman";
- }
- x = (x + 1) % 2;
- r.flag = true;
- r.notify();
- }
- }
- }
- }
- class Output implements Runnable {
- private Resource r;
- Output(Resource r) {
- this.r = r;
- }
- public void run() {
- while(true) {
- synchronized(r) {
- if(!r.flag)
- try{r.wait();}catch(Exception e){}
- System.out.println(r.name + ": " + r.sex);
- r.flag = false;
- r.notify();
- }
- }
- }
- }
- class Resource {
- String name;
- String sex;
- boolean flag = false;
- }
复制代码 |
|