实验2线程与同步解答Word格式文档下载.docx

上传人:b****8 文档编号:22514506 上传时间:2023-02-04 格式:DOCX 页数:10 大小:16.59KB
下载 相关 举报
实验2线程与同步解答Word格式文档下载.docx_第1页
第1页 / 共10页
实验2线程与同步解答Word格式文档下载.docx_第2页
第2页 / 共10页
实验2线程与同步解答Word格式文档下载.docx_第3页
第3页 / 共10页
实验2线程与同步解答Word格式文档下载.docx_第4页
第4页 / 共10页
实验2线程与同步解答Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验2线程与同步解答Word格式文档下载.docx

《实验2线程与同步解答Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验2线程与同步解答Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

实验2线程与同步解答Word格式文档下载.docx

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();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1