📜  资质| Wipro模拟测试|问题24(1)

📅  最后修改于: 2023-12-03 15:12:14.611000             🧑  作者: Mango

资质 | Wipro 模拟测试 | 问题24

在 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 的值。

Markdown 格式
## 资质 | 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 的值。