为什么有时候我会得到输出:java中的多线程错误输出
患者4访问医生办公室。
患者2访问医生办公室。
患者1访问医生办公室。
当我期望输出的顺序是递增的,即病人1,然后是病人2或3,然后病人4或5.即我不明白如何才能看到打印4,主要类中的初始循环是设置患者编号的内容,并且我立即启动线程。
这是我的代码:
public static void main(String[] args)
{
NUM_P = 5;//TEMPORARILY HARD CODE, WILL TAKE ARG FROM COMMANDLINE IN THE FUTURE
NUM_A = 2;
Patient[] myPatients = new Patient[NUM_P];
for (int i = 0; i < NUM_P; i++)
{
Patient patient = new Patient();
patient.setPatientNumber(i);
myPatients[i] = patient;
myPatients[i].start();
}
}
在患者类,
public void run()
{
attendParty();
visitDoctor();
}
public void visitDoctor()
{
System.out.println("Patient-"+(this.getPatientNumber())+" visits doctor office.");
}
public void attendParty() throws InterruptedException
{
Random randomGen = new Random();
int val = randomGen.nextInt(101);
if (val < 20)
{
interrupt();
//NO NEED TO CREATE A PATIENT THREAD, THE PATIENT IS NOT SICK HEHE
}
else
{
this.setSickness(true);//He is sick
}
}
您的患者是否与其他患者或医生或调度员有过沟通?如果不是,他们可以让别人饿死。 –
如果您想要顺序执行,那么使用单个线程。 –