题目:编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。
代码如下
1、Runable接口实现
package com.day505.testdemo.exam;
/**
*通过继承Runnable接口来实现
*/
public class Test1 implements Runnable{
private int minNum,maxNum;
public Test1(int minNum, int maxNum) {
this.minNum = minNum;
this.maxNum = maxNum;
}
@Override
public void run() {
int n=0;
for (int i=minNum;i<maxNum;i++){
if (isPrimeNumber(i)){
n++;
if (n%5 == 0){
System.out.print("");
}
}
}
System.out.println(minNum+"--"+maxNum+"之间有"+n+"个素数");
}
//判断
static boolean isPrimeNumber(int num){
if (num == 2){
return true;
}
if (num < 2 || num%2 == 0){
return false;
}
for (int i=3;i<=Math.sqrt(num);i=i+2){
if (num%i == 0){
return false;
}
}
return true;
}
public static void main(String[] args) {
Test1 test1 = new Test1(2,100000);
Test1 test2 = new Test1(100000,200000);
new Thread(test1).start();
new Thread(test2).start();
}
}
2、继承Thread实现
package com.day505.testdemo.exam;
public class Test2 extends Thread {
private int minNum,maxNum;
public Test2(int minNum, int maxNum) {
this.minNum = minNum;
this.maxNum = maxNum;
}
@Override
public void run() {
int n=0;
for (int i=minNum;i<maxNum;i++){
if (isPrimeNumber(i)){
n++;
if (n%5 == 0){
System.out.print("");
}
}
}
System.out.println(minNum+"--"+maxNum+"之间有"+n+"个素数");
}
//判断
static boolean isPrimeNumber(int num){
if (num == 2){
return true;
}
if (num < 2 || num%2 == 0){
return false;
}
for (int i=3;i<=Math.sqrt(num);i=i+2){
if (num%i == 0){
return false;
}
}
return true;
}
public static void main(String[] args) {
Test2 test2 = new Test2(2,100000);
Test2 test3 = new Test2(100000,200000);
test2.start();
test3.start();
}
}