Java并发编程:线程同步和死锁问题示例
在Java并发编程中,线程同步和死锁是两个重要的概念。下面将通过示例来解释这两点。
线程同步:
线程同步是为了防止多个线程同时访问或修改共享资源,从而导致数据不一致的问题。示例:多线程访问同一数组
class Counter {
int count = 0;
void increment() {
count++;
}
void decrement() {
count--;
}
}
class Worker extends Thread {
Counter counter;
Worker(Counter c) {
this.counter = c;
}
@Override
public void run() {
while (true) {
counter.increment();
try {
// 模拟耗时操作
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
counter.decrement();
if (!counter.isCountPositive()) {
break; // 可能出现负数情况,提前退出循环
}
}
}
}
public class Main {
public public static void main(String[] args) {
Counter counter = new Counter();
Worker worker1 = new Worker(counter);
Worker worker2 = new Worker(counter);
// 启动线程
worker1.start();
worker2.start();
// 等待所有线程完成
try {
worker1.join();
worker2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 线程同步示例,这里我们用Counter类来模拟共享资源
class Counter {
int count = 0;
// 两个方法分别表示增加和减少操作
void increment() {
count++;
}
void decrement() {
count--;
}
}
在这个示例中,我们创建了一个Counter类作为共享资源。两个Worker线程分别对这个资源进行增加和减少的操作。
通过线程同步(如使用synchronized关键字),确保在任何时候只有一个线程可以访问或修改共享资源,从而防止死锁的发生。
还没有评论,来说两句吧...