ChenZhK 2016-05-14 04:54 采纳率: 50%
浏览 1037
已采纳

java多线程问题,请教大神,多谢

class Res
{
String name;
String sex;
}
class Input implements Runnable
{
private Res r;//这句是什么意思?跟Res r = new Res();有什么区别?
Input(Res r)
{
this.r=r;
}
public void run()
{
int x = 0;
while(true)
{
if(x==0)
{
r.name="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex="女女";
}
x=(x+1)%2;
}
}
}
class Output implements Runnable
{
private Res r;
Output(Res r)
{
this.r=r;
}
public void run()
{
while(true)
{
System.out.println(r.name+"-------"+r.sex);
}
}
}
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();
}
}
执行结果是什么?为什么是那样?
线程t2输出的为什么是t1处理后的r?

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2016-05-14 05:40
    关注

    private Res r;//这是在类中定义类的成员变量,而没有赋初始值,而你后面那句是对成员变量初始化。如果写成下面:

     private Res  r = new Res();
    

    也是定义成员变量,但是定义的时候就给赋值了初值了。
    你这段代码执行while(true)中没有break,所以是死循环,交替输出:

     mike-------man
    mike-------女女
    丽丽-------女女
    丽丽-------女女
    丽丽-------man
    mike-------man
    mike-------女女
    mike-------man
    丽丽-------man
    mike-------女女
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog