qq_41235711 2019-04-25 17:37 采纳率: 66.7%
浏览 292
已采纳

java多线程得不到想要的结果

问题是:三个人频繁通过只允许一个人经过的门,当人们通过门时,统计人数
另外还会记录通行者的姓名和出生地,当姓名和出生地的头一个字母不相等时
输出这是第几人通过,姓名和出生地在哪

门:

public class Gate {
    private int count=0;
    private String Pname="Nobody";
    private String Paddress="Nowhere";

    public void pass(String Pname,String Paddress){
        this.count++;
        this.Pname=Pname;
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            // TODO: handle exception
        }
        this.Paddress=Paddress;
        if(Pname.charAt(0)!=Paddress.charAt(0)){
            System.out.println("*******broken********"+toString());}
    }

    public String toString(){
        return "No."+count+":"+Pname+","+Paddress;
    }
}

通过的人:

public class User extends Thread{
    private  final String name;
    private final String address;
    private final Gate gate;

    public User(Gate gate,String name,String address) {
        this.name=name;
        this.address=address;
        this.gate=gate;
    }

    public void run(){
        System.out.println(name+"   begin");
        while(true){
            gate.pass(name, address);
        }
    }
}

主函数:

public class Main {
public static void main(String[] args) {
    Gate gate=new Gate();
    new User(gate, "Alice", "Aust").start();
    new User(gate, "Bob", "Brazil").start();
    new User(gate, "Chris", "Canada").start();
}
}

按理说应该是很快就能得出经过的人姓名和出生地的头一个字母会不相等,但就是出不来,当把下面不等号改成等号反而会得出结果,不明白这是为什么

if(Pname.charAt(0)!=Paddress.charAt(0))

没有C币,大家见谅!!!在此小的谢谢您了!

  • 写回答

3条回答

  • Your_Exios 2019-04-26 10:49
    关注

    刚刚,我自己试了一下,光速打脸啊。
    确实是没加this的问题,加了this才能确保取到的值是当前线程的值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(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