请采用实现Runnable接口的多线程技术,用50个线程,生成10000个[1~100000]的随机整数
时间: 2024-12-18 16:28:03 浏览: 7
java多线程读取多个文件的方法
在Java中,我们可以利用`ExecutorService`和`ThreadFactory`配合`Callable`和`Future`来实现这种场景,因为`Callable`允许我们返回值,而`Future.get()`可以获取线程的结果。这里我们将创建50个线程,每个线程执行一个计算任务并返回一个随机整数。以下是详细的步骤:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class RandomNumberGenerator {
private static final int THREAD_COUNT = 50;
private static final int MAX_NUMBER = 100000;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
// 设置线程名方便跟踪
thread.setName("Random Number Generator Thread " + thread.getId());
return thread;
}
});
List<Future<Integer>> futures = new ArrayList<>();
for (int i = 0; i < THREAD_COUNT; i++) {
Future<Integer> future = executor.submit(new NumberGeneratingTask());
futures.add(future);
}
// 等待所有任务完成并打印结果
for (Future<Integer> future : futures) {
try {
System.out.println(future.get()); // 获取并打印随机数
} catch (Exception e) {
e.printStackTrace();
}
}
executor.shutdown(); // 关闭线程池
}
static class NumberGeneratingTask implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return (int)(Math.random() * MAX_NUMBER) + 1; // 生成1到MAX_NUMBER之间的随机整数
}
}
}
```
在这个例子中,`NumberGeneratingTask`实现了`Callable`接口,它负责生成随机数,并通过`executor.submit()`提交任务。`Future.get()`用于获取每个任务的执行结果。
阅读全文