📅  最后修改于: 2023-12-03 15:12:14.611000             🧑  作者: Mango
在 Wipro 的模拟测试中,问题24考察的是对多线程的掌握。下面是该问题的详细描述和解答方法。
编写一个程序,创建多个线程,在各个线程中输出线程编号和线程名称,并使用线程安全的方式计算一个全局变量的和。
首先,需要定义一个线程安全的全局变量:
private static AtomicInteger sum = new AtomicInteger(0);
然后,在每个线程中输出线程编号和名称,以及计算该线程的贡献:
public void run() {
int localSum = 0;
for (int i = 0; i < 100; i++) {
System.out.println("Thread " + Thread.currentThread().getId() + " - " + Thread.currentThread().getName() );
localSum += i;
}
sum.addAndGet(localSum);
}
在主函数中,创建多个线程并启动它们:
public static void main(String[] args) {
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(new MyRunnable());
thread.start();
threads.add(thread);
}
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Sum: " + sum.get());
}
这里的 MyRunnable 是实现 Runnable 接口的一个类,它包含了上面的 run 方法。在主函数中,首先创建了多个线程并启动它们,然后等待所有线程的执行完成,并输出全局变量 sum 的值。
## 资质 | Wipro 模拟测试 | 问题24
在 Wipro 的模拟测试中,问题24考察的是对多线程的掌握。下面是该问题的详细描述和解答方法。
### 问题描述
编写一个程序,创建多个线程,在各个线程中输出线程编号和线程名称,并使用线程安全的方式计算一个全局变量的和。
### 解答方法
首先,需要定义一个线程安全的全局变量:
```java
private static AtomicInteger sum = new AtomicInteger(0);
然后,在每个线程中输出线程编号和名称,以及计算该线程的贡献:
public void run() {
int localSum = 0;
for (int i = 0; i < 100; i++) {
System.out.println("Thread " + Thread.currentThread().getId() + " - " + Thread.currentThread().getName() );
localSum += i;
}
sum.addAndGet(localSum);
}
在主函数中,创建多个线程并启动它们:
public static void main(String[] args) {
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(new MyRunnable());
thread.start();
threads.add(thread);
}
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Sum: " + sum.get());
}
这里的 MyRunnable 是实现 Runnable 接口的一个类,它包含了上面的 run 方法。在主函数中,首先创建了多个线程并启动它们,然后等待所有线程的执行完成,并输出全局变量 sum 的值。