flag|=t[i].getThreadState();
}
returnflag;
}
}
运行该程序后,屏幕将首先出现:
Thread0started....
Thread1started....
Thread2started....
Thread3started....
Thread4started....
然后等待用户输入,如果这时用户依次输入0、3、2、1、4,屏幕将依次出现
0
Thread0ended.
3
Thread3ended.
2
Thread2ended.
1
Thread1ended.
4
programended.
Thread4ended.
即程序会根据用户输入的数值来结束相应序号的线程,所有线程结束后程序结束。
4.在package中创建一个Java类ThirdRunnable并运行查看结果,其代码如下:
package;
publicclassThirdRunnableimplementsRunnable{
privateintid;
privatestaticintstopid=-1;
staticintn=10;
publicThirdRunnable(intid){
=id;
}
publicstaticvoidmain(String[]args){
for(inti=1;i<=n;i++){
newThread(newThirdRunnable(i)).start();
}
stopid=n;
}
publicvoidrun(){
"Thread"+id+"started....");
while(id!
=stopid){
();
}
"Thread"+id+"ended.");
stopid--;
}
}
运行该程序后,屏幕将出现:
Thread1started....
Thread2started....
Thread3started....
Thread4started....
Thread5started....
Thread6started....
Thread7started....
Thread8started....
Thread9started....
Thread10started....
Thread10ended.
Thread9ended.
Thread8ended.
Thread7ended.
Thread6ended.
Thread5ended.
Thread4ended.
Thread3ended.
Thread2ended.
Thread1ended.
即程序会根据按照正序启动10个线程,然后逆序结束线程。
5.将ThirdRunnable类改写,使其能够按照任意顺序结束;
下面是就是改写后的结果。
package;
publicclassFourthRunnableimplementsRunnable{
tart();
}
}
publicvoidrun(){
"Thread"+id+"started....");
try{
(2000);
}catch(InterruptedExceptione){
();
}
while(id!
=t[stopid]){
();
}
"Thread"+id+"ended.");
stopid++;
}
}
6.编写代码实现实验内容中的第3题。
四、调试分析
在调试线程程序的过程中,并干扰到其它应用程序的正常运行,后来经过仔细观察,发现是因为在线程的循环体当中没有调用sleep语句,从而导致线程不断地抢占CPU,从而影响其它程序的正常运行。
五、实验结果
按照指导书的步骤完成了第1题和第2题,同时编写程序完成了第3题,达到了所要求的实验结果。
第3题的源代码如下:
;
publicclassDataRecieverextendsThread{
ArrayListdatalist=newArrayList();
finalintMAX=10;"+data+">.");
count++;
}
}
privateintgenerateData(){
Randomr=new
return();
}
}
;
publicclassPositionextendsThread{
intpositionid;;
soldoutflag=true;
returnfalse;
}
if(t!
=null){
"Ticket"++
"issoldtoperson"++
"atposition"+positionid+".");
();
}
returntrue;
}
}
publicvoidrun(){
Iteratorit=();
Personp;
Randomrnd=newRandom();
while()){;
publicclassTicketController{
publicstaticvoidmain(String[]args){
inti;
ArrayListticketlist=newArrayList();
ArrayListpersonlist=newArrayList();
Tickett;
Positionpos[]=newPosition[3];
Personp;
for(i=0;i<10;i++){
t=newTicket(i);
(t);
}
for(i=0;i<3;i++){
pos[i]=newPosition(i,ticketlist);
}
for(i=0;i<20;i++){ddPerson(p);
}
for(i=0;i<3;i++){
pos[i].start();
}
}
}