实践中的 Java 并发 - 清单 14.9 解释
在 Java 中,并发是指多个线程同时执行,以提高程序的执行效率。清单 14.9 是一个简单的 Java 并发示例,用于解释并发编程的基本概念。
清单 14.9 代码如下:
public class Counter {
private int value;
public void increment() {
value++;
}
public int getValue() {
return value;
}
}
public class Main {
public static void main(String[] args) {
final Counter counter = new Counter();
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
counter.increment();
}
}).start();
}
System.out.println("Counter value: " + counter.getValue());
}
}
在这个示例中,我们定义了一个 Counter
类,它有一个 increment()
方法用于增加计数器的值,还有一个 getValue()
方法用于获取计数器的当前值。在 main
方法中,我们创建了 1000 个线程,每个线程都会调用 counter.increment()
方法,以增加计数器的值。最后,我们输出计数器的值。
这个示例演示了并发编程中的一个常见问题:多个线程同时访问共享数据时,可能会出现数据不一致的情况。在这个例子中,多个线程同时访问 Counter
对象的 value
字段,可能会导致计数器的值不准确。
为了解决这个问题,我们可以使用 Java 提供的同步机制,例如 synchronized
关键字,来确保在同一时刻只有一个线程能够访问共享数据。修改后的代码如下:
public class Counter {
private int value;
public synchronized void increment() {
value++;
}
public synchronized int getValue() {
return value;
}
}
public class Main {
public static void main(String[] args) {
final Counter counter = new Counter();
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
counter.increment();
}
}).start();
}
System.out.println("Counter value: " + counter.getValue());
}
}
在这个修改后的示例中,我们在 increment()
和 getValue()
方法前添加了 synchronized
关键字,以确保在同一时刻只有一个线程能够访问 Counter
对象的 value
字段。这样,我们就可以避免数据不一致的问题,保证计数器的值准确。
总之,实践中的 Java 并发 - 清单 14.9 解释,主要是通过一个简单的示例,介绍了并发编程中的数据不一致问题,以及如何使用 Java 提供的同步机制来解决这个问题。
领取专属 10元无门槛券
手把手带您无忧上云