首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下技术说明及Java程序,将Java程序中(1)~(5)空缺处的语句填写完整。 【说明】 用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请
阅读以下技术说明及Java程序,将Java程序中(1)~(5)空缺处的语句填写完整。 【说明】 用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请
admin
2009-02-15
69
问题
阅读以下技术说明及Java程序,将Java程序中(1)~(5)空缺处的语句填写完整。
【说明】
用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。
【Java程序】
import java.io.* ;
public class TestThread{ //Java Application主类
public static void main(Sting args[ ]){
if (args length<l) { //要求用户输入一个命令行,否则程序不能进行下去
system.out.println("请输入一个命令行参数");
system.exit(0) ;
} //创建用户Thread子类的对象实例,使其处于NewBorn状态
primeThread getPrimes = new primeThread (Integer.parseInt(args[0]));
getPrimes.start () ; //启动用户线程,使其处于Runnable状态
while(getPrimes.isAlive()&& getPrimes.ReadyToGoOn() ) {
system.out.println("Counting the prime number..\n"); //说明主线程在运行
try {
Thread. sleep (500); //使主线程挂起指定毫秒数,以便用户线程取得控制权,
//sleep是static的类方法
}
Catch(InterruptedException e) { //sleep方法可能引起的异常,必须加以处理
return ;
}
} //while循环结束
System.out.println ("按任意键继续……") ; //保留屏幕,以便观察
try {
(1);
}
Catch(IOException e) { }
} //main方法结束
}
class primeThread extends Thread {
//创建用户自己的Thread子类run()中实现程序子线程操作
boolean m_bContinue=true; //标志本线程是继续
int m_nCircleNum ; /循环的上限
prime Thread(int Num){ //构造函数
m_nCircleNum =Nam;
}
boolean ReadyToGoOn () { //判断本线程是否继续执行
return ( (2) );
}
public void run () {
//继承并重载父类Thread的run ()方法,在该线程被启动时自动执行
int number =3;
boolean flag=true;
while (true) { //无限循环
for((3); i++) //检查number是否为素数
if(number %i==0)
(4);
system, out. println (flag);
if (flag) //打印该数是否为素数的信息
system,out.print in (number+ "是素数") ;
else
sys rem.out.print In (number+ "是素数") ;
number++ ; //修改number的数值,为下一轮素数检查做准备
if (number> m_nCircleNum) { //到达要求检查数值的上限
m_bCont inue= false ; //则准备结束此线程
return ; //结束run()方法,结束线程
}
(5);
try{ //经过一轮检查之后,暂时休眠一段时间
sleep(500); //使主线程挂起指定毫秒数,以便父线程取得控制权
}
Catch(InterruptedException e) {
Return;
}
} //for循环结束
} //while循环结束
} //run()方法结束
} //primeThread类定义结束
选项
答案
(1)system.in.read0 (2)m_bContinue (3)int i=2;i<number (4)flag =false (5)flag=true
解析
这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。
多线程是Java语言的一大特性。多线程就是同时存在n个执行体,按几条不同的执行线索共同工作的情况。程序就是一段静态的代码,可以理解为一组计算机命令的集合。进程就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程更小的单位,一个进程在执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以理解为进程的子集。
线程是有状态和声明周期的,每个Java程序都会有一个缺省的主线程,对于应用程序applcation来说,main()方法就是一个主线程。Java语言使用的是Thread类及其子类的对象来表示线程的。创建一个新线程的生命周期有如下工作状态。
1)新建。当一个Thread类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源。
2)就绪。处于新建状态的线程被启动后,将进入线程队列排队等待CPU服务,这个时候具备了运行的条件,一旦轮到CPU的时候,就可以脱离创建它的主线程独立开始自己的生命周期。
3)运行。就绪的线程被调度并获得CPU的处理权后进入了运行状态,每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行的时候,它将自动调用本对象的run()方法,从第一句代码开始执行。可见,对线程的操作应该写到run()方法中。
4)阻塞。一个正在执行的线程如果在某种情况下不能执行而进入阻塞状态,此时它不能进入排队状态,只有引起阻塞的原因消失的时候,线程才可以继续进入排队状态等待CPU处理。
5)死亡。处于死亡状态的线程不具有继续执行的能力,线程死亡的主要原因是正常运行的线程完成了全部工作,即执行完了run()方法,另外就是被提前强制地终止了。
线程的调度也有优先级别,即同等排列的情况下,优先级高的线程可以被CPU提前处理。Thread类有3个线程优先级的静态常量:MIN-PRIORITY、NORM-PRIORITY和MAX-PRIORITY。其中, MIN-PRIORITY代表最小优先级,默认数值为1:NORM-PRIORITY代表普通优先级,默认数值为5; MAX-PRIORITY代表最高优先级,默认数值为10。
对于一个新建线程,系统会遵循以下原则为其指定优先级。
1)新建线程将继承创建它的父线程的优先级。父线程是指执行创建新线程对象语句的线程,它可能是程序的主线程,也可能是某一个用户自定义的线程。
2)通常情况下,主线程具有普通优先级。
另外,可以通过调用Thread类的方法setPriority(int a)来修改系统自动设置的线程优先级,使之符合程序的特定需要。
Java编程实现多线程有两种途径,一种是创建自己的线程子类,另一种是实现一个接口Runnable。无论是哪种途径最终都需要使用Thread类及其方法。Thread类有2种构造方法: public Thread()用来创建一个线程对象和public Thread(Runnabler)创建线程对象,参数r成为被创建的目标对象。这个口标必须实现Runnbale接口,给出该接口的run()方法的方法体,在方法体中进行操作。用两个构造方法创建完的线程就是一个新建的状态,等待处理。接着启动线程的start()方法,启动线程对象,线程进入排队状态(即就绪状态)。然后线程操作run()方法,该方法里的内容是被系统处理的内容。如果想使线程进入休眠状态,则可以调用sleep(int millsecond)方法,millsecond是以毫秒为单位的休眠时间。也可调用 sleep(int millsecond,int nanosecond)方法,其中nanosecond是以纳秒为单位的休眠时间。终止线程用isAlive()方法来完成。在调用stop()方法终止一个线程之前,最好先用isAlive()方法检查一下该线程是否仍然存活,杀死不存在的线程可能会造成系统错误。
对于本试题所给出的程序是一个Java Application,其中定义了两个类,一个是程序的主类TestThread,另一个是用户自定义的Thread类的子类primeThread。程序的主线程,即TestThread主类的main()方法首先根据用户输入的命令行参数创建一个primeThread类的对象,并调用start()方法启动该子线程对象,使之进入就绪状态。主线程首先输出一行信息表示自己在活动,然后调用sleep()方法使自己休眠一段时间以便子线程获取处理器。这是因为主线程创建的子线程与之优先级相同,如果主线程不让出处理器,则子线程只能等待主线程执行完毕才能获得处理器,进入运行状态的子线程将检查一个数值是否是素数并显示出来,然后休眠一段时间以便父线程获得处理器。获得处理器的父线程将显示一行信息表示自己在活动,然后调用sleep()方法使自己也休眠一段时间以便子线程获得处理器。获得处理器的父线程将显示一行信息表示自己在活动然后再休眠。如此循环,每次子线程启动都检查新增的数据是否为素数并打印,直至该数大于其预定的上限。此时子线程从run()方法返回并结束其运行,然后主线程也结束。
(1)空缺处所填写的语句用于等待一个键盘输入,否则就保留屏幕,因此(1)空缺处应填入“system.in.read()”。m_bContinue是本线程是否继续的标志,(2)空缺处应填入该标志以判断本线程是否继续执行。
由于子线程中所检查的数值大于其预定的上限之前while循环一直都进行,根据(3)空缺处所在的 for循环语句的“i++”和if(number %i==0)判断语句可知,对于检查number是否为素数的(3)空缺处应填入inti=2;i<number。
flag是用来标志该数是否是素数的,如果为真,则表示是素数。number%i==0表示数number不是素数,所以(4)中缺处应填入“flag=false”。
(5)空缺处应填入“flag=true”以恢复flag,准备检查下一个number。
转载请注明原文地址:https://kaotiyun.com/show/UojZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
计算机系统是由__________组成的。
银行的信息非常重要,对信息以及信息处理的安全性要求很高。安全性包括多项任务,但不(24)。
信息处理技术员的网络信息检索能力不包括(10)。
某学生要进行数据结构、操作系统和计算机组成原理三门课的考试。已知数据结构成绩是85分、操作系统成绩是87分,希望总分达到240分,需要求出计算机组成原理成绩应考的分数。此类问题可以使用Excel中的(53)功能来解决。
在Excel中,若A1单元格中的函数为"=IF("教授">"助教",TRUE,FALSE)",按回车键后,A1单元格中的显示内容为______。
Word定时自动保存功能可以()。
Windows7系统运行时,用户用鼠标右击某个对象经常会弹出________________。
在Excel2007中,在单元格A1中输入函数“=LEN(”信息处理技术员”)”,按回车键后,则A1单元格中的值为__________。
计算机操作系统的主要功能是______。
随机试题
女性,19岁,1年前体检中发现HBsAg阳性,当时无症状和体征,肝功能试验正常。前2周过劳后恶心、腹胀、尿黄伴乏力住院;ALT118U/L,TBiL32μmol/L,HBsAg(+),抗-HBcIgG(+)及IgM(+),抗-HAVIgG(+)。
男性,51岁,混合痔切除术。如病人采取肛门坐浴,告诉病人
我国铁路进站、通过、遮断信号机的显示距离不得少于()m。
商业银行在资产负债综合管理中,致力于实现资产与负债在期限上的匹配。这是商业银行进行()管理的举措。
总分类会计科目一般按()进行设置。
“现代教育学之父”是()。
甲出资60%,乙、丙各出资20%成立合伙组织,起字号为怡和商行,并推举甲为商行负责人。在与商行的债务人丁的一场诉讼中,甲未与乙、丙商量而放弃怡和商行对丁的债权10万元,乙、丙知道后表示反对。甲放弃债权的行为的效力如何?()
幼儿园对80名小朋友参加兴趣班情况进行调查,调查发现一共报了三种兴趣班且每个小朋友都有报班。其中未报钢琴班的有40人,未报美术班的有50人,未报舞蹈班的有60人。问至少有多少人报了不止一个兴趣班?()
“偏偏”和“反正”都是语气副词。(北京师范大学2016)
下列哪一个不是队列的基本运算
最新回复
(
0
)