Java作业五 多线程

it2023-10-16  76

Java作业5 多线程

1. 判断

下面哪些方法是java.lang.Thread类中的方法?哪些方法是能抛出异常InterruptedException的?哪些方法在Java中是禁用的?

run(), start(), stop(), suspend(), resume(), sleep(), interrupt(), yield(), join()

答: 方法:run()、start()、stop()、suspend()、resume()、interrupt()、yield()、join() 能抛出异常InterruptedException的:sleep()、join()、 禁用:stop()、suspend()、resume()

2. 编写两个线程:

第一个线程计算2-1000000之间的质数及个数

第二个线程计算1000000-2000000之间的质数及个数。

/** * FileName: main * Author: zhangnuanxin * Date: 2020/10/20 11:06 * Description: * 编写两个线程: * 第一个线程计算2-1000000之间的质数及个数 * 第二个线程计算1000000-2000000之间的质数及个数。 * History: * <author> <time> <version> <desc> * zhangnuanxin 2020/10/20 1.0 描述 */ public class main { public static void main(String[] args) { MyThread1 mt1 = new MyThread1(); //创建MyThread1类型的线程一:mt1 Mythread2 mt2 = new Mythread2(); //创建MyThread2类型的线程二:mt2 mt1.start(); //运行线程一 mt2.start(); //运行线程二 } } class MyThread1 extends Thread //新建第一个线程,目的是计算2-1000000之间的质数及个数 { long count1 = 0; /* * 计算线程一中出现了几个质数 * 因为线程一计算的是2-1000000的数字 * 为了保证程序稳定 * 采用long类型的数字来计数 */ boolean isPrime(long num) { long tmp = (long) Math.sqrt(num); for (long i = 2; i <= tmp; i++) { if (num % i == 0) { return false; } } return true; } /* * 一个boolean类型的判断一个数是否是素数的函数 * 如果是素数就返回true * 如果不是素数就返回false * 对于每个数n,其实并不需要从2判断到n-1; * 一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n) * 因此,要想求素数,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数 */ public void run() //实现线程一功能 { for (long i = 2; i <= 1000000; i++) { if (isPrime(i)) //如果是素数就输出这个素数并且统计数+1 { System.out.println("This is from thread 1: " + i + " is a prime!"); count1++; } } System.out.println("The number of primes in thread1 is: " + count1); //输出线程一中一共有多少个素数 } } class Mythread2 extends Thread //新建第二个线程,目的是计算1000000-2000000之间的质数及个数 { long count2 = 0; /* * 计算线程二中出现了几个质数 * 因为线程二计算的是1000000-2000000的数字 * 为了保证程序稳定 * 采用long类型的数字来计数 */ boolean isPrime(long num) { long tmp = (long) Math.sqrt(num); for (long i = 2; i <= tmp; i++) { if (num % i == 0) { return false; } } return true; } /* * 一个boolean类型的判断一个数是否是素数的函数 * 如果是素数就返回true * 如果不是素数就返回false * 对于每个数n,其实并不需要从2判断到n-1; * 一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n) * 因此,要想求素数,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数 */ public void run() //实现线程二功能 { for (long i = 1000000; i <= 2000000; i++) { if (isPrime(i)) //如果是素数就输出这个素数并且统计数+1 { System.out.println("This is from thread 2: " + i + " is a prime!"); count2++; } } System.out.println("The number of primes in thread2 is: " + count2); //输出线程二中一共有多少个素数 } }
最新回复(0)