实验2线程与同步解答Word格式文档下载.docx
《实验2线程与同步解答Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验2线程与同步解答Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
import.*;
publicclassFirstThreadextendsThread{
publicstaticvoidmain(String[]args){
intn;
try{
n=((newBufferedReader(newInputStreamReader)).readLine());
for(inti=0;
i<
n;
i++){
(newFirstThread()).start();
}
}catch(IOExceptione){
();
}
}
publicvoidrun(){
"
Threadstarted...."
);
(1000);
}catch(InterruptedExceptione){
Threadended."
}
}
运行该程序后,程序会等待用户的输入,如果用户输入:
3
结果将会是:
Threadstarted....
Threadended.
即程序会根据用户输入的数值来生成相应数目的线程,每个线程运行1秒后结束。
3.在package中创建一个Java类SecondThread并运行查看结果,其代码如下:
publicclassSecondThreadextendsThread{
privateintid;
privatebooleanflag=true;
privatestaticSecondThreadt[];
privatestaticintn=5;
publicSecondThread(intid){
=id;
publicvoidstopThread(){
flag=false;
publicbooleangetThreadState(){
returnflag;
publicstaticvoidmain(String[]args){
intm;
t=newSecondThread[n];
for(inti=0;
(t[i]=newSecondThread(i)).start();
while(testThreads()){
try{
m=((newBufferedReader(
newInputStreamReader)).readLine());
t[m].stopThread();
}catch(IOExceptione){
();
}
programended."
Thread"
+id+"
started...."
while(flag){
(1000);
}catch(InterruptedExceptione){
ended."
privatestaticbooleantestThreads(){
booleanflag=false;
flag|=t[i].getThreadState();
运行该程序后,屏幕将首先出现:
Thread0started....
Thread1started....
Thread2started....
Thread3started....
Thread4started....
然后等待用户输入,如果这时用户依次输入0、3、2、1、4,屏幕将依次出现
Thread0ended.
Thread3ended.
2
Thread2ended.
1
Thread1ended.
4
programended.
Thread4ended.
即程序会根据用户输入的数值来结束相应序号的线程,所有线程结束后程序结束。
4.在package中创建一个Java类ThirdRunnable并运行查看结果,其代码如下:
publicclassThirdRunnableimplementsRunnable{
privatestaticintstopid=-1;
staticintn=10;
publicThirdRunnable(intid){
for(inti=1;
=n;
newThread(newThirdRunnable(i)).start();
stopid=n;
while(id!
=stopid){
stopid--;
运行该程序后,屏幕将出现:
Thread5started....
Thread6started....
Thread7started....
Thread8started....
Thread9started....
Thread10started....
Thread10ended.
Thread9ended.
Thread8ended.
Thread7ended.
Thread6ended.
Thread5ended.
即程序会根据按照正序启动10个线程,然后逆序结束线程。
5.将ThirdRunnable类改写,使其能够按照任意顺序结束;
下面是就是改写后的结果。
publicclassFourthRunnableimplementsRunnable{
tart();
(2000);
=t[stopid]){
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;
}
Iteratorit=();
Personp;
Randomrnd=newRandom();
while()){;
publicclassTicketController{
inti;
ArrayList<
Ticket>
ticketlist=newArrayList<
();
Person>
personlist=newArrayList<
Tickett;
Positionpos[]=newPosition[3];
for(i=0;
10;
t=newTicket(i);
(t);
3;
pos[i]=newPosition(i,ticketlist);
20;
i++){ddPerson(p);
pos[i].start();