多线程操作:
编写一个有两个线程的程序,第一个线程用来计算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();
}
}