java synchronized编程题
时间: 2023-09-21 08:14:01 浏览: 65
在Java中,使用synchronized关键字可以实现线程同步,解决脏数据的问题。通过在方法声明中加上synchronized关键字,可以保证多个线程在执行这个方法时的互斥性,即同一时间只有一个线程可以进入该方法进行操作。这样可以避免多个线程同时对共享数据进行修改而导致数据不一致的问题。
下面是一个示例代码:
```java
public class MyThread implements Runnable {
private int count;
public synchronized void run() {
for (int i = 0; i < 5; i++) {
count++;
System.out.println("线程" + Thread.currentThread().getName() + ",count:" + count);
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread1 = new Thread(myThread, "Thread1");
Thread thread2 = new Thread(myThread, "Thread2");
thread1.start();
thread2.start();
}
}
```
在上述代码中,MyThread类实现了Runnable接口,并重写了run方法,并在run方法声明中加上了synchronized关键字。通过创建两个线程Thread1和Thread2,并启动这两个线程,我们可以看到两个线程交替执行,保证了count的修改操作的原子性。
需要注意的是,synchronized关键字可以修饰方法、代码块和静态方法,用法有所区别。在本例中我们展示了修饰方法的用法。
除了使用synchronized关键字,还有其他的线程同步方式,如Lock和Semaphore等。但synchronized关键字是最常用且简单的一种方式。可以根据具体需求和场景进行选择和使用。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)