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 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器