NEWS LETTER

Java多线程-练习

  • Home
  • Java-multithreading.html
Scroll down

题目

1.编写具有两个线程的程序,第一个线程用来计算2-1000000之间的质数及个数,第二个线程用来计算1000000-2000000之间的质数及个数。

2.编写多线程程序,显示目前正在运行的线程名和目前的活动线程数。

第一题

先将类继承,即extends Thread,并定义必要的数(开始数和结尾数)

定义构造类

1
2
3
4
public Double(int begin,int end){
this.begin=begin;
this.end=end;
}

创建处理函数

简单的素数问题处理函数,具体的做法可以自行百度

1
2
3
4
5
6
7
8
9
10
11
12
13
public void PrimeNumber(){
for(int i=this.begin;i<=this.end;i++){
boolean isPrime = true;
for(int j=2;j<=Math.sqrt(i);j++){
if(i%j==0) {
isPrime=false;
break;
}
}
if(isPrime) jishu++;
}
System.out.println(begin+"到"+end+"有质数的个数为:"+jishu);
}

主函数的处理

其实主函数只需要定义结构体然后引用解决方法即可

1
2
3
4
5
6
7
public static void main(String[] args) {
Double xiancheng1=new Double(2,1000000);
Double xiancheng2=new Double(1000000,2000000);
xiancheng1.PrimeNumber();
xiancheng2.PrimeNumber();

}

结果

结果

完全符合新必应的回答

新必应回答

改进

指出错误

但是新必应(基于GPT4.0)指出我们的代码并没有启动新的线程,确实我们应该要重写run方法来调用处理判断素数的方法

1
2
3
public void run() {
PrimeNumber();
}

添加的同时也应该改变主方法中的方法调用

1
2
xiancheng1.run();
xiancheng2.run();

第二题

要显示当前正在运行的线程名和当前的活动线程数,可以使用Thread.currentThread().getName()来获取当前线程的名字,使用Thread.activeCount()来获取当前活动线程的数量。

在你的代码中,可以在PrimeNumber()方法的开头添加以下代码来显示当前正在运行的线程名:

1
System.out.println("当前运行的线程名:" + Thread.currentThread().getName());

main()方法中,你可以在创建线程后立即输出当前的活动线程数,可以像这样修改你的代码:

1
2
3
4
5
6
7
public static void main(String[] args) {
Double xiancheng1 = new Double(2, 1000000);
Double xiancheng2 = new Double(1000000, 2000000);
System.out.println("当前活动线程数:" + Thread.activeCount());
xiancheng1.PrimeNumber();
xiancheng2.PrimeNumber();
}

这样,当运行程序时,将会显示当前正在运行的线程名和当前的活动线程数。

错误结果

我们发现线程名均为main说明没有进行多线程服务,查找信息我们发现,主函数调用时候是使用start方法而非run方法

1
2
xiancheng1.start();
xiancheng2.start();

结果

正确结果

完整代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Double extends Thread{
private int begin=0;
private int end=0;
private int jishu=0;
public Double(int begin,int end){
this.begin=begin;
this.end=end;
}
public void run() {
System.out.println("当前运行的线程名:" + Thread.currentThread().getName());
PrimeNumber();
}
public void PrimeNumber(){
for(int i=this.begin;i<=this.end;i++){
boolean isPrime = true;
for(int j=2;j<=Math.sqrt(i);j++){
if(i%j==0) {
isPrime=false;
break;
}
}
if(isPrime) jishu++;
}
System.out.println(begin+"到"+end+"有质数的个数为:"+jishu);
}

public static void main(String[] args) {
Double xiancheng1=new Double(2,1000000);
Double xiancheng2=new Double(1000000,2000000);
System.out.println("当前活动线程数:" + Thread.activeCount());
xiancheng1.start();
xiancheng2.start();

}
}
推荐文章
站内
相关 (48.9%)
5分钟

Java类和对象-练习

要掌握并熟练应用Java语言,就需要对Java语言的基础进行充分的了解与练习。

1
i囡漫笔
原创文章
站内
相关 (19.1%)
14分钟

Java 数组—JAVA语言基础

数组是最为常见的一种数据结构,是相同类型的用一个标识符封装到一起的基本类型数据序列或对象序列。
(本文章参考《Java从入门到精通 第5版 明日科技》。

2
本站作者
原创文章
站内
相关 (19.1%)
16分钟

Java 字符串—JAVA语言基础

字符串是Java程序中经常处理的对象,如果字符串运用得不好,将影响到程序运行的效率。
(本文章参考《Java从入门到精通 第5版 明日科技》。故不采用

3
本站作者
原创文章
站内
相关 (19.0%)
22分钟

JAVA语言基础

要掌握并熟练应用Java语言,就需要对Java语言的基础进行充分的了解。
(本文章参考《Java从入门到精通 第5版 明日科技》。故不采用 BY-NC-

4
i囡漫笔
原创文章

--- over ---

其他文章
目录导航 置顶
  1. 1. 题目
  2. 2. 第一题
    1. 2.1. 定义构造类
    2. 2.2. 创建处理函数
    3. 2.3. 主函数的处理
    4. 2.4. 结果
    5. 2.5. 改进
  3. 3. 第二题
    1. 3.1. 结果
  4. 4. 完整代码如下
请输入关键词进行搜索