java定义一个多线程程序,主线程输出1~100之间的偶数,每行输出10个数,子线程输出1~100之间的素数,每行输出10个数。
时间: 2023-08-31 13:38:57 浏览: 207
了解多线程,java多线程讲解
### 回答1:
以下是一个实现要求的多线程程序示例,该程序定义了一个主线程和100个子线程,主线程通过调用子线程来输出1~100之间的偶数,每行输出10个数字。每个子线程负责输出1~100之间的某一个整数,每行输出10个数字。为了控制并发访问,程序使用了同步锁(synchronized)来保证每个线程可以正确地输出。
```
public class MultiThreadProgram {
public static void main(String[] args) {
Printer printer = new Printer();
for (int i = 0; i < 100; i++) {
Thread thread = new Thread(new Task(printer, i + 1));
thread.start();
}
printer.printEvenNumbers();
}
}
class Task implements Runnable {
private Printer printer;
private int number;
public Task(Printer printer, int number) {
this.printer = printer;
this.number = number;
}
public void run() {
printer.printNumber(number);
}
}
class Printer {
private int evenNumber = 2;
private int currentNumber = 1;
public synchronized void printNumber(int number) {
while (number != currentNumber) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName() + ": " + number + " ");
currentNumber++;
notifyAll();
}
public synchronized void printEvenNumbers() {
while (evenNumber <= 100) {
while (currentNumber % 2 != 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName() + ": " + evenNumber + " ");
evenNumber += 2;
currentNumber++;
notifyAll();
if (evenNumber % 20 == 0) {
System.out.println();
}
}
}
}
```
注意,程序使用wait()方法来等待当前线程可以正确地输出数字,并使用notifyAll()方法来通知其他线程可以开始输出。程序还使用了Thread.currentThread().getName()来输出线程的名称,方便观察线程之间的交替输出。
### 回答2:
以下是一个用Java定义的多线程程序,其中主线程输出1~100之间的偶数,每行输出10个数,子线程输出1~100之间的素数,每行输出10个数:
```
// 导入必要的类
import java.util.ArrayList;
import java.util.List;
// 继承Thread类创建子线程
class PrimeThread extends Thread {
@Override
public void run() {
int count = 0;
for (int i = 2; i <= 100; i++) {
if (isPrime(i)) { // 判断是否为素数
System.out.print(i + " ");
count++;
if (count % 10 == 0) { // 每行输出10个素数
System.out.println();
}
}
}
}
// 判断一个数是否为素数
private boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
public class Main {
public static void main(String[] args) {
Thread primeThread = new PrimeThread(); // 创建子线程对象
primeThread.start(); // 启动子线程
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) { // 判断是否为偶数
System.out.print(i + " ");
count++;
if (count % 10 == 0) { // 每行输出10个偶数
System.out.println();
}
}
}
}
}
```
这个程序中,我们创建了一个继承自Thread类的子线程PrimeThread,其中的run()方法实现了子线程输出1~100之间的素数。然后在主线程Main中,我们在子线程执行前先输出1~100之间的偶数。主线程和子线程同时执行,分别输出各自的结果。
阅读全文