问题 问答题

请完成下列Java程序:运行3个线程有自己的标志,用a,b,c表示,每个线程显示一个“Start”信息和一个“End”信息并且间隔地显示2个“Loop”信息(间隔变化为0.5~2秒之间的随机延迟)。
程序运行结果如下(注:由于事件间隔为随机数,所以,运行结果的顺序不唯一):
a Start
b Start
c Start
b Loop
a Loop
b Loop
b End
c Loop
a Loop
a End
c Loop
c End
注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。
public class ex5_2 implements Runnable

static char flag5_2=’a’;
public static void main(String[] args)

ex5_2 obj5_2=new ex5_2();
Thread thread5_2=new Thread(obj5_2);
Thread5_2.start();
thread5_2=new Thread(obj2_2);
thread5_2.start();
threa’d5_2=new Thread(obj2_2);
thread5_2.start();

public void run()

char myflag5_2;
synchronized(this)

______;

System.out.println(myflag5_2+"Start");
for(int i=0;i<2;i++)

try

Thread.sleep(rand(500,2000));
System.out.println(myflag5_2+"Loop");
catch(InterruptedException ie)

System.out.println(ie);


System.out.println(myflag5_2+"End");

final private iht rand(int low,int high)

return(______);

答案

参考答案:myflag5_2=flag5_2++
((int)((high-low+1)*(Math.random())))+low

解析:[讲解] 本题主要考查线程的创建与同步和控制随机数产生范围的算法。解题关键是,熟悉线程的概念和使用、线程的同步控制、char类型数据的操作,以及熟悉随机数产生的方法 Math.random(),并且能够进一步根据需要控制随机数产生的范围。在本题中,main()方法中创建3个线程,这3个线程使用。obj5_2对象。线程调用start()方法来中断,使一个新的线程开始执行,并且调用run()方法。第1个空,run()方法为自己设置一个线程的标志,并为下一个线程的使用增加这个标志值,由于此时线程正在处理中,因此在同步块中完成修改标志的语句放在同步块中。第2个空,通过low和high两个参数,控制产生随机数的范围,将基本的数学思想应用于程序设计中。

单项选择题
单项选择题