本帖最后由 rick1991chen 于 2015-4-22 14:17 编辑
- class Res
- {
- String name;
- String sex;
- boolean flag = false;
- }
- class Input implements Runnable
- {
- private Res r;
- Input(Res r)
- {
- this.r = r;
- }
- public void run()
- {
- int x = 0;
- while (true)
- {
- synchronized(r)
- {
- if (r.flag)
- try{r.wait();}catch(Exception e){}
- if (x==0)
- {
- r.name="瑞克";
- r.sex="男";
- }
- else
- {
- r.name = "Lily";
- r.sex = "female";
- }
- x = (x+1)%2;
- r.flag = true;
- r.notify();
- }
- }
- }
- }
- class Output implements Runnable
- {
- private Res r;
- Output(Res 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 = true;
- r.notify();
- }
- }
- }
- }
- class InputOutputDemo
- {
- public static void main(String[] args)
- {
- Res r = new Res();
- new Thread (new Input(r)).start();
- new Thread (new Output(r)).start();
- }
- }
复制代码 这个 程序的问题我知道出在输出函数中的 更改标记的位置。 整个代码的用意是通过等待唤醒交替赋值,打印一个共享数据。但是出现了标记更改错误的时候,打印结果变成了交替打印一排,如图所示:
有没有大神能给分析一下,整个线程的运行过程 (用代码行行数+一点解释的语句)
|
|