黑马程序员技术交流社区
标题:
看视频中有几行代码不明白意思,求教
[打印本页]
作者:
硫氢化铁
时间:
2015-8-18 22:53
标题:
看视频中有几行代码不明白意思,求教
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="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex = "女女女女女";
}
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 = false;
r.notify();
}
}
}
}
class InputOutputDemo
{
public static void main(String[] args)
{
Res r = new Res();
Input in = new Input(r);
Output out = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
t1.start();
t2.start();
}
}
复制代码
我没看懂的是两个实现Runnable接口的类中run()前面的代码是干什么用的,只知道毕老师说这样保证的是Res对象的唯一性,为什么?
作者:
boboyuwu
时间:
2015-8-18 23:17
2个run访问同一个r里面数据 如果不用r直接用new Res() 那么2个run就得创建2个Res对象 你操作你的我操作我的完全没关系 针对这种需要同步数据的就要使用同一个对象
作者:
硫氢化铁
时间:
2015-8-18 23:32
boboyuwu 发表于 2015-8-18 23:17
2个run访问同一个r里面数据 如果不用r直接用new Res() 那么2个run就得创建2个Res对象 你操作你的我操 ...
那是不是这样,主函数创建了一个Res对象,既然要保证Res对象的唯一,两个函数就创建该类对象记录住r首地址值,然后构造函数初始化?
作者:
keviner
时间:
2015-8-18 23:44
构造函数啊,初始化的时候是带着属性的啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2