两个线程共同数数,从1数到50,保证两个线程不重复数数,编程实现,并在控制台中输出数数的过程。(用同步方法的办法解决线程的不安全)
时间: 2023-11-19 12:05:57 浏览: 33
以下是一个使用同步方法解决线程不安全的例子:
```java
public class CountingThread implements Runnable {
private static int count = 1; // 计数器
private static final Object lock = new Object(); // 同步锁
private boolean isOddThread; // 是否为奇数线程
public CountingThread(boolean isOddThread) {
this.isOddThread = isOddThread;
}
@Override
public void run() {
while (count <= 50) {
synchronized (lock) { // 加锁
if ((isOddThread && count % 2 == 1) || (!isOddThread && count % 2 == 0)) {
System.out.println(Thread.currentThread().getName() + ": " + count++);
}
}
}
}
public static void main(String[] args) {
CountingThread oddThread = new CountingThread(true);
CountingThread evenThread = new CountingThread(false);
new Thread(oddThread, "奇数线程").start();
new Thread(evenThread, "偶数线程").start();
}
}
```
这个例子中,`count` 是一个静态变量,所有线程都共享它。为了保证线程安全,我们使用了一个同步锁 `lock` 来控制访问 `count`。在每个循环中,线程会获取 `lock` 的锁,然后判断当前数是否为该线程需要数的数,如果是,则输出该数,并将 `count` 加 1。最后,释放 `lock` 的锁。由于使用了同步锁,所以保证了线程安全。
相关推荐
![](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)