Java基础篇--多线程之第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数

博客介绍了多线程操作,编写一个含两个线程的程序,分别计算2~100000和100000~200000之间素数的个数并输出结果。还提及判断素数的方法、计算范围内素数的方法,以及实现继承Runnable接口的线程类,最后给出整体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程操作:

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

1、判断是否为素数的方法:
是返回true,不是返回false

static Boolean isPrimeNumber(long num) {//判断是否为素数
            //判断一个数是否为素数
            if (num == 2) return true;//2特殊处理
            if (num < 2 || num % 2 == 0) return false;//识别小于2的数和偶数
            for (int i = 3; i <= Math.sqrt(num); i += 2) {
                if (num % i == 0) {//识别被奇数整除
                    return false;
                }
            }
            return true;
        }

2、计算一个范围内素数的方法

static int PriNum(long num1, long num2) {//计算两数之间有几个素数
    int n = 0;//用来计数
    for (; num1 <= num2; num1++) {
        if (isPrimeNumber(num1))
            n++;
    }
    return n;
}

3、写一个thread2继承Runnable接口,写俩属性start和end,添加构造方法,再重写run方法。
整体代码如下

/**
 * 编写两个线程,一个计算2~100000之间素数的个数,另一个计算100000~200000之间的素数个数
 */
public class ThreadWork2 {

    static class Thread2 implements Runnable {

        private long start, end;

        public Thread2(long start, long end) {//构造方法,传入两个值
            this.start = start;
            this.end = end;
        }

        static int PriNum(long num1, long num2) {//计算两数之间有几个素数
            int n = 0;//用来计数
            for (; num1 <= num2; num1++) {
                if (isPrimeNumber(num1))
                    n++;
            }
            return n;
        }

        static Boolean isPrimeNumber(long num) {//判断是否为素数
            //判断一个数是否为素数
            if (num == 2) return true;//2特殊处理
            if (num < 2 || num % 2 == 0) return false;//识别小于2的数和偶数
            for (int i = 3; i <= Math.sqrt(num); i += 2) {
                if (num % i == 0) {//识别被奇数整除
                    return false;
                }
            }
            return true;
        }

        @Override
        public void run() {//重写run方法
            System.out.println(start + "到" + end + "之间有:" + PriNum(start, end) + "个素数");
        }
    }


    public static void main(String[] args) {
        Thread thread1 = new Thread(new Thread2(2,100000));
        Thread thread2 = new Thread(new Thread2(100000,200000));
        thread1.start();
        thread2.start();
    }

}




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值