编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。

题目

编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。


相似考题

4.阅读以下技术说明及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+ "是素数") ;elsesys rem.out.print In (number+ "是素数") ;number++ ; &nb

更多“编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。”相关问题
  • 第1题:

    _________用来为一个线程开启一个消息循环,用来操作MessageQueue。


    参考答案:Looper对象

  • 第2题:

    下列程序的功能是:计算500~800之间素数的个数cnt,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件OUT66.DAT中。

    注意:部分源程序已给出。

    请勿改动主函数mam()和写函数writeDAT()的内容。

    试题程序:

    include<stdio. h>

    int cnt, sum;

    void countValue ( )

    {

    }

    void main ()

    {

    cnt= sum=0;

    countValue();

    printf ("素数的个数=%dkn", cnt );

    printf ("按要求计算得值=%d\n", sum );

    writeDAT ( );

    }

    writeDAT ( )

    {

    FILE *fp;

    fp=fopen ( "OUT66. DAT", "w" );

    fprintf (fp, "%d\n%d\n", cnt, sum);

    fclose (fp);

    }


    正确答案:void countValue ( ) { int ijhalfyy[100]; for (i=500; i800; i++) { half=i/2; for (j=2; 3=half; j++) if (i%j==0) break; /*如果该数不是素数则退出此层循环*/ if (j>=half) /*如果该数是素数则将该数存入数组yy中*/ { yy [cnt]=i; ont ++; /*统计素数的个数*/ } } for(i=0j=-1;icnt;i++) /*计算这些素数的间隔加、减之和*/ { j=i*-1; sum+=j*yy[i]; } }
    void countValue ( ) { int i,j,half,yy[100]; for (i=500; i800; i++) { half=i/2; for (j=2; 3=half; j++) if (i%j==0) break; /*如果该数不是素数,则退出此层循环*/ if (j>=half) /*如果该数是素数,则将该数存入数组yy中*/ { yy [cnt]=i; ont ++; /*统计素数的个数*/ } } for(i=0,j=-1;icnt;i++) /*计算这些素数的间隔加、减之和*/ { j=i*-1; sum+=j*yy[i]; } } 解析:本题考查的知识点如下:
    (1)利用循环和“%”进行素数的判断。
    (2)间隔加、减的实现。
    在本题中,首先要找出判断素数的方法。若一个数a依次除以从2到a/2的数所得的余数都不是0,则这个数是素数。用此方法依次判断出从500到800区间内的素数。由题意可知,第1,3,5…个素数计算加法,第2,4,6…个素数计算减法。减去1个正整数就是加上负的这个正整数,所以可以将这个正整数乘以-1进行加法。使用循环实现求和,在奇数次的循环中,每个素数乘以1,偶数次的循环中,素数乘以-1,就可实现间隔加、减。

  • 第3题:

    Windows提供了两种线程,( )和( )。用户界面线程通常用来处理消息循环、与用户交互;工作者线程用来处理后台的计算。


    参考答案:用户界面线程、工作者线程

  • 第4题:

    下列程序的运行结果是______。 class A implements Runnable { int a; iht i = 2; A(int x) { a = x; } public void run() { while(i > 0) { System.out.println("线程" + a); i--; } } } public class Testl3 { public static void main(String[] args) { Thread a1 = new Thread(new A(1)); Thread a2 = new Thread(new A(2)); a1.start(); a2.start(); } }

    A.线程1 线程1 线程2 线程2

    B.线程1 线程2

    C.线程1 线程2 线程1 线程2

    D.线程1 线程1 线程1 线程1


    正确答案:A
    解析:类A实现了Runnable接口,并且通过类的构造函数A(int x)传递整型参数给对象作为线程的编号。在run()线程体内,实现打印两个字符串。在main()方法中,用A类的2个对象创建了a1和a2两个线程,当a1和a2开始执行时,从A类的run()方法开始执行。

  • 第5题:

    程序test.c的功能是:选出大于100小于1000的所有个位数字与十位数字之和被10除所得余数恰是百位数字的所有素数(如293)。计算并输出上述这些素数的个数cnt以及这些素数值的和sum。请考生编写函数countValue实现程序要求,最后调用函数writeDAT把结果cnt和sum输出到文件out.dat中。


    正确答案:
    【审题关键句】选出100以上、1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数,计算并输出上述这些素数的个数以及这些素数值的和。
    【解题思路】
    ①首先定义一个循环变量循环i以及用来存放3位数分解之后各位数的变量bw(百位)、SW(十位)和gw(个位)。②通过for循环对100到999的每个数字进行逐个的扫描,循环变量i从100开始,每执行一次循环,i的值加1。③在每次执行for循环时,分解当前变量i值的百位上的数字、十位上的数字和个位上的数字,然后利用表达式(gw+SW)
    %10==bw来判断个位数字与十位数字之和被l0除所得余数与百位数字是否相等,同时调用函数isP判断变量i的值是否是素数,如果以上两个条件同时满足(两个表达式通过运算符进行连接),则计数变量cnt值加1、并把其值加到变量sum上,直到循环结束,即可求出从100到999中所有满足条件的素数的个数和它们的和。
    【参考答案】


  • 第6题:

    程序、进程和线程3个概念之间的关系是( )。

    A.程序与进程同一个概念

    B.线程与进程同一个概念

    C.一个进程可以包含多个线程

    D.一个线程包含多个进程


    正确答案:C
    解析:本题考查线程,进程,程序之间的关系。选项A错误,进程概念和程序概念最大的不同之处在于,进程是动态的,而程序是静态的;进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为一个独立单位得到操作系统的认可:一个程序可以对应多个进程,但一个进程只能对应一个程序。进程和程序的关系犹如演出和剧本的关系。选项B错误,线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。例如,用户启动了一个窗口中的数据库应用程序,操作系统就将对数据库的调用表示为一个进程。假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务:在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,操作系统则把每一个请求——工资单报表和新输入的数据查询表示为数据库进程中的独立的线程。线程可以在处理器上独立调度执行,这样,在多处理器环境下就允许几个线程各自在单独处理器上进行。选项C正确,进程和线程的关系:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;资源分配给进程,同一进程的所有线程共享该进程的所有资源;处理机分给线程,即真正在处理机上运行的是线程;线程在执行过程中,需要协作同步;不同进程的线程间要利用消息通信的办法实现同步。选项D错误,由选项C的分析可知选项D是错误的。由此可知本题的答案是C。

  • 第7题:

    WindowsNT中,下列线程中优先级最高的是()。

    • A、交互式线程
    • B、I/O型线程
    • C、计算型线程
    • D、空转线程

    正确答案:A

  • 第8题:

    在进程与线程的描述中,下列()是错误的。

    • A、一个进程可以包含多个线程
    • B、进程之间的切换快于线程
    • C、各个线程可以共享整个进程的所有资源
    • D、Unix中最小的调度单位是线程

    正确答案:B

  • 第9题:

    下列关于线程的叙述中,正确的是()。

    • A、线程包含CPU现场,可以独立执行程序
    • B、每个线程有自己独立的地址空间
    • C、进程只能包含一个线程
    • D、线程之间的通信必须使用系统调用函数

    正确答案:A

  • 第10题:

    填空题
    线程对象的()方法用来阻塞当前线程,指定线程运行结束或超时后继续运行当前线程。

    正确答案: join()
    解析: 暂无解析

  • 第11题:

    单选题
    下列方法能够用来实现线程之间通信的是(  )。
    A

    notify()

    B

    run()

    C

    sleep()

    D

    join()


    正确答案: A
    解析:
    wait()和notify()是java.lang.object类的方法,是实现线程通信的方法。wait()和notify()可以实现线程的同步:当某线程需要在synchronized块中等待共享数据状态改变时调用wait(),这样该线程等待并释放共享数据对象的锁,其他线程可以获得该对象的锁,并进入synchronized块对共享数据进行操作。当其操作结束后,只要调用notify()方法就可以通知正在等待的线程重新占有锁并运行。所以,notify()能够实现线程之间的通信。B项,run()用来定义线程体;C项,sleep()用来执行函数的挂起;D项,join()是等待该线程终止。

  • 第12题:

    单选题
    下列关于线程的叙述中,正确的是()。
    A

    线程包含CPU现场,可以独立执行程序

    B

    每个线程有自己独立的地址空间

    C

    进程只能包含一个线程

    D

    线程之间的通信必须使用系统调用函数


    正确答案: A
    解析: 进程的创建、通信和调度开销比较大,影响了多道程序的执行效率。为此引入了线程。线程是进程中的一个程序执行单元。线程包含CPU执行现场和执行堆栈,可以独立地执行程序。一个进程可以包含多个线程,即包含多个程序执行单元。进程中的多个线程共享进程的地址空间和其他资源,包括程序、数据、文件、通信端口等。因此,线程之间可以直接交换数据。

  • 第13题:

    在大多数多线程的应用程序中,线程之间不需要共享相同的对象。()


    参考答案:错误

  • 第14题:

    比较线程和进程,下列说法有误的是

    A.系统产生线程负担要比进程小的多,所以线程也被称为“轻型进程”

    B.线程和进程不能同时出现在同一个系统或程序中

    C.进程是一个内核级的实体,线程是一个用户级的实体

    D.线程不包含进程地址空间中的代码和数据,线程是计算过程在某时刻的状态


    正确答案:B
    解析:线程本身不是一个进程,它是比进程更小的单位,它必须运行于一个进程之中。因此,在题目中的说法线程和进程不能同时出现在同一个系统或程序中,是和线程本身的概念相矛盾的。

  • 第15题:

    下述是关于进程和线程的说法:

    ①在传统的OS中,进程是系统分配资源和进行调度的基本单位。而线程则是系统分配资源的基本单位。

    ②进程就是线程。

    ③线程可以创建另外一个线程,同一个进程中的多个线程可以并发执行。线程也有就绪、运行和阻塞三种基本状态。

    其中正确的个数为______。

    A.0

    B.1

    C.2

    D.3


    正确答案:B
    解析:在传统的OS中,进程是系统分配资源和进行调度的基本单位。线程则是系统实施调度的基本的、独立的单位。线程基本上不拥有资源,只拥有一点运行必不可少的资源。引入线程的原因:由于在进程的创建、撤消和切换过程中,系统付出的时空代价较大,因此在系统中的进程数目不宜过多,进程切换不能过于频繁,这就限制了并发程度的提高。引入线程之后,将传统的进程的两个基本属性分开,也就是说在传统的OS中,进程是系统分配资源和进行调度的基本单位,当引入线程之后,进程只作为分配资源的基本单位,而将线程作为调度的基本单位。可以通过创建线程来完成任务,提高了并发程度。线程可以创建另外一个线程,同一个进程中的多个线程可以并发执行。线程也有就绪、运行和阻塞三种基本状态。

  • 第16题:

    程序test.c的功能是:计算500~800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,计算其间隔减、加之和,即第1个素数.第2个素数+第3个素数.第4个素数+第5个素数…的值sum。请编写函数count Value实现程序的要求,最后main函数调用函数writeOAT把结果cnt和Sum,输出到文件out.dat中。


    正确答案:
    【审题关键句】计算500~800区间内素数的个数,素数的值从大到小排序,再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值。
    【解题思路】
    ①首先定义一个循环变量循环i和用于正负号转换的变量j,同时赋i的初值为-1。
    ②通过for循环对800到500的每个数字进行逐个的扫描,指定循环变量i的初值为800,当i值等于500停止循环,每执行一次循环,i的值便减1。(注意,本题for循环从大到小依次读取数据是根据题目要求设计的,这样得到的素数值其排序方式就是从大到小排序。)
    ③在每次执行for循环时,都调用素数判断函数isPrime判断当前的i值是否为素数,如果是素数,则素数计数变量cnt值加1,正负号转换变量j的值乘以-1,实现正负数的交替转换,最后将每次循环得到的i*j的值累加到求和变量 sum中。
    【参考答案】

  • 第17题:

    程序test.c的功能是:计算100以内满足以下条件的所有整数i的个数cnt以及这些i之和sum。条件:i,i+4,i+10都是素数,同时i+10小于100。请考生编写函数countvalue实现程序要求,最后调用函数wfiteDAT把结果cnt和sum输出到文件out.dat中。(数值l不是素数)


    正确答案:
    【审题关键句】100以内(含l00)满足i、i+4、i+10都是素数的整数的个数以及这些i之和。
    【解题思路】
    ①首先定义循环变量i,然后将i的值赋初值为3,每循环一次则将i的值加1,直到i<90。
    ②在for循环中,每执行一次循环则调用函数isPrime(该函数具体的算法已经在源程序中给出,直接用即可),对i、 i+4、i+10是否同时是素数进行判断,如果这三个数同时为素数,则计数变量cnt值加1,同将时将变量i的值累加到sum上。
    【参考答案】

  • 第18题:

    下面有关超线程技术叙述正确的有()。

    • A、超线程技术就是把两个逻辑内核模拟成两个物理芯片
    • B、超线程技术可以使单个处理器都能使用线程级并行计算
    • C、超线程技术的英译是Hyper-Threading Technology
    • D、超线程技术就是一个物理芯片中有两个物理核心

    正确答案:B,C

  • 第19题:

    程序、进程和线程之间的关系是什么?什么是多线程程序?


    正确答案: 程序是一段静态的代码,它是应用软件执行的蓝本。
    进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程。每一个进程都有自己独立的一块内存空间、一组系统资源。
    线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每个线程都有其产生、发展和消亡的过程。

  • 第20题:

    在Hibernate中,下列关于SessionFactory说法正确的有()

    • A、它是线程安全的
    • B、它不是线程安全的
    • C、它是轻量级的
    • D、一个SessionFactory实例对应一个数据存储源

    正确答案:A,D

  • 第21题:

    下列关于超线程技术说法错误的是()

    • A、超线程技术的CPU在功能上与双核CPU相似
    • B、超线程技术就是利用特殊的硬件指令,把两个逻辑内核拟成物理芯片
    • C、超线程技术是让单个处理器能使用线程级并行计算,从而兼容多线程并行计算
    • D、只要CPU支持超线程技术就能发挥超线程的性能,与其它硬件和软件无关

    正确答案:C

  • 第22题:

    问答题
    程序、进程和线程之间的关系是什么?什么是多线程程序?

    正确答案: 程序是一段静态的代码,它是应用软件执行的蓝本。
    进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程。每一个进程都有自己独立的一块内存空间、一组系统资源。
    线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每个线程都有其产生、发展和消亡的过程。
    解析: 暂无解析

  • 第23题:

    单选题
    实用的网络程序最少需要几个线程?()
    A

    两个线程,一个线程等待网络消息,另一个线程处理用户动作

    B

    一个线程即可

    C

    三个线程,一个线程作为服务器端,第二个线程作为客户端,第三个线程响应用户动作

    D

    四个线程,一个线程作为服务器端,第二个线程作为客户端,第三个线程作为数据传输,第四各线程响应用户动作


    正确答案: C
    解析: 暂无解析

  • 第24题:

    单选题
    以下关于线程异步问题的说法不正确的是()
    A

    线程在应用程序开发过程中负责分担进程的耗时计算工作。

    B

    一个进程中如果需要多个线程共同协作才能完成业务计算的话,往往会涉及到线程之间的数据通讯。

    C

    线程依靠CPU调度分配时间片获得运行机会,当CPU时间片耗尽,线程将会停止运行等待CPU的再次分配。

    D

    由于线程的运行与停止是可控的,所以当多个线程之间需要同时对一块进程中的共享内存进程操作的时候,就有可能发生线程异步交互错误。


    正确答案: D
    解析: 暂无解析