synchronized 线程的例子和作用
时间: 2023-07-26 12:31:56 浏览: 79
线程同步小例子
4星 · 用户满意度95%
synchronized 关键字可以用来控制多个线程的访问同一共享资源时的同步问题,它的作用是实现线程的互斥访问和同步执行。
下面是一个使用 synchronized 实现线程同步的例子:
```
public class SyncExample {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
public class MyThread extends Thread {
private SyncExample syncExample;
public MyThread(SyncExample syncExample) {
this.syncExample = syncExample;
}
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
syncExample.increment();
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
SyncExample syncExample = new SyncExample();
MyThread thread1 = new MyThread(syncExample);
MyThread thread2 = new MyThread(syncExample);
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println(syncExample.getCount());
}
}
```
在上面的例子中,SyncExample 类中的 increment() 和 getCount() 方法都使用了 synchronized 关键字,保证了它们在同一时刻只能有一个线程访问。MyThread 类是一个线程类,它持有一个 SyncExample 对象,并在 run() 方法中重复调用 increment() 方法,使 count 的值逐步增加。在 Main 类中,我们创建了两个 MyThread 对象来进行并发执行,最后输出 SyncExample 对象的 count 值。
通过使用 synchronized,我们可以确保多个线程访问共享资源时的安全性,避免了竞态条件和数据不一致的问题。
阅读全文