Java并发编程常见问题:锁竞争及死锁示例
在Java并发编程中,常见的问题是锁竞争和死锁。这里分别给出这两种情况的示例:
锁竞争(Race Condition):
这种情况通常发生在多个线程同时访问共享资源而这些资源没有正确的同步机制时。示例代码:
// 假设有一个共享变量count
private int count = 0;
public void increment() {
synchronized (this) { // 锁竞争
count++;
System.out.println("Incremented: " + count);
}
}
public static void main(String[] args) {
Counter counter = new Counter();
Thread thread1 = new Thread(counter::increment, "Thread 1"));
Thread thread2 = new Thread(counter::increment, "Thread 2"));
thread1.start();
thread2.start();
// 注意这里不会立即输出"Incremented:",因为线程是异步的
}
这段代码会创建两个线程同时尝试增加count。由于只有一个锁(即counter对象),可能会出现两个线程同时持有锁并修改count的情况,这就是锁竞争。
死锁(Deadlock):
死锁发生在两个或更多的线程在执行过程中因争夺资源而造成的一种相互等待的现象,任何一方都不能释放已获得的资源,从而导致死循环。
示例代码中并没有直接展示死锁情况,但如果上述锁竞争没有得到妥善处理,可能会间接引发死锁。
还没有评论,来说两句吧...