用java编写一个启动1000个线程的程序。每个 线程将一个初始值为0的变量和加1。定义整数包装 持有和的对象。运行带有或不带有同步的程序以查看 其效果。
时间: 2024-02-13 17:05:39 浏览: 26
好的,以下是一个启动1000个线程的程序,每个线程将一个初始值为0的变量加1,并使用整数包装类来持有和的对象:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
AtomicInteger sum = new AtomicInteger(0);
for (int i = 0; i < 1000; i++) {
new Thread(() -> {
sum.incrementAndGet();
}).start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Sum: " + sum.get());
}
}
```
这个程序使用AtomicInteger类来保证线程安全,避免了并发修改导致的竞态条件问题。每个线程执行sum.incrementAndGet()方法,使得sum的值加1。最终输出sum的值,可以看到它的值为1000。
如果不使用AtomicInteger类,而是简单地使用int类型的变量来保存和,那么在多线程并发修改时就会出现竞态条件问题,导致最终的结果不一定是1000。可以尝试去掉AtomicInteger类,运行程序观察其结果。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)