// 使用 synchronized 关键字来确保线程安全
class Counter {
private int count = 0;
// synchronized 方法确保同一时间只有一个线程可以执行该方法
public synchronized void increment() {
count++;
}
// synchronized 方法确保同一时间只有一个线程可以执行该方法
public synchronized int getCount() {
return count;
}
}
public class SynchronizedExample {
public static void main(String[] args) throws InterruptedException {
final Counter counter = new Counter();
// 创建多个线程来并发地调用 increment 方法
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
}
});
t1.start();
t2.start();
// 等待两个线程执行完毕
t1.join();
t2.join();
// 输出最终的计数值
System.out.println("Final count is: " + counter.getCount());
}
}
Counter
类:包含一个 count
变量和两个方法 increment()
和 getCount()
。这两个方法都使用了 synchronized
关键字,确保在多线程环境下对 count
的操作是线程安全的。
SynchronizedExample
类:创建了两个线程 t1
和 t2
,它们分别调用 increment()
方法 1000 次。由于 increment()
方法是同步的,因此即使两个线程同时运行,也不会出现竞争条件(race condition),最终的计数值应该是 2000。
synchronized
关键字:确保同一时刻只有一个线程可以执行被 synchronized
修饰的方法或代码块,从而避免了多个线程同时修改共享资源时可能出现的问题。
上一篇:java反射
下一篇:java代码
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站