深入理解:Java多线程并发问题实例
Java多线程并发问题是编程中常见的挑战,尤其是在处理共享资源(如内存、文件等)时。以下是一个具体的实例:
线程同步:
假设有一个类Counter
,它包含一个共享的整数变量count
。两个线程A和B分别执行如下代码:
class Counter {
int count = 0;
}
Thread A = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
Counter counter = new Counter();
// 更新count
// ...
System.out.println("Thread A - Counter " + i + ": " + counter.count);
}
}));
Thread B = new Thread(() -> {
for (int i = 6; i <= 10; i++) {
Counter counter = new Counter();
// 更新count
// ...
System.out.println("Thread B - Counter " + i + ": " + counter.count);
}
}));
问题:
线程A和B同时访问Counter
类的count
变量,可能会导致数据不一致。解决方案:
- 使用
synchronized
关键字来确保同一时间只有一个线程在访问共享资源。
class Counter {
int count = 0;
// 同一个时刻,只有一个线程能执行该代码块
synchronized void increment() {
count++;
}
synchronized int getCount() {
return count;
}
}
- 使用
通过以上实例,我们可以理解Java多线程并发问题的具体表现和解决策略。
还没有评论,来说两句吧...