编写一段代码,启动1000个线程。每个线程给初始值为0的变量sum加1。定义一个Integer包装对象来保存sum。使用同步和不使用同步来运行这个程序。
时间: 2024-01-22 13:17:44 浏览: 97
使用同步的代码示例:
```java
public class ThreadExample {
private static Integer sum = 0;
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[1000];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(() -> {
synchronized (sum) {
sum++;
}
});
threads[i].start();
}
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
System.out.println("Sum: " + sum);
}
}
```
不使用同步的代码示例:
```java
public class ThreadExample {
private static Integer sum = 0;
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[1000];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(() -> {
sum++;
});
threads[i].start();
}
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
System.out.println("Sum: " + sum);
}
}
```
在使用同步的代码中,我们使用了`synchronized`块来确保对`sum`的修改是原子的。这样可以避免多个线程同时修改`sum`的值而导致数据不一致的问题。在不使用同步的代码中,我们没有控制多个线程同时修改`sum`的值,因此可能会导致数据不一致的问题。
阅读全文