(同步线程)编写一个启动1000个线程的程序。每个 线程将一个初始值为0的变量和加1。定义整数包装 持有和的对象。运行带有或不带有同步的程序以查看 其效果。
时间: 2024-02-13 15:05:59 浏览: 56
很高兴收到您的问题!这个问题已经在之前得到回答了,以下是之前的回答:
好的,下面是一个简单的Java程序,可以启动1000个线程,每个线程将一个初始值为0的变量加1,并使用整数包装持有和的对象。程序中包含有同步和不带同步两种情况。
```java
public class ThreadTest {
private static Integer sum = 0;
private static final int THREAD_NUM = 1000;
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
// 不带同步
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < THREAD_NUM; i++) {
Thread thread = new Thread(() -> {
sum += 1;
});
threads.add(thread);
thread.start();
}
for (Thread thread : threads) {
thread.join();
}
System.out.println("不带同步, sum = " + sum + ", 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
// 带同步
sum = 0;
startTime = System.currentTimeMillis();
Object lock = new Object();
threads = new ArrayList<>();
for (int i = 0; i < THREAD_NUM; i++) {
Thread thread = new Thread(() -> {
synchronized (lock) {
sum += 1;
}
});
threads.add(thread);
thread.start();
}
for (Thread thread : threads) {
thread.join();
}
System.out.println("带同步, sum = " + sum + ", 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
}
}
```
运行程序后,可以看到不带同步的情况下,sum的值不一定是1000,而带同步的情况下,sum的值一定是1000。同时,带同步的程序运行时间比不带同步的程序要长,因为带同步的程序需要等待锁的释放。
阅读全文