返回
用最简短的话让你一眼认清死锁与线程安全
后端
2024-01-10 05:12:09
死锁与线程安全是并发编程中两个最常见的错误。死锁是指两个或多个线程因为互相等待而导致无法继续执行的情况。线程安全是指当多个线程同时访问共享数据时,不会导致数据损坏的情况。
今天我们用最简短的话让你一眼认清死锁与线程安全!
死锁的例子
public class Deadlock {
private Object lock1 = new Object();
private Object lock2 = new Object();
public void method1() {
synchronized (lock1) {
System.out.println("method1 lock1");
synchronized (lock2) {
System.out.println("method1 lock2");
}
}
}
public void method2() {
synchronized (lock2) {
System.out.println("method2 lock2");
synchronized (lock1) {
System.out.println("method2 lock1");
}
}
}
public static void main(String[] args) {
Deadlock deadlock = new Deadlock();
new Thread(deadlock::method1).start();
new Thread(deadlock::method2).start();
}
}
线程安全的例子
public class ThreadSafe {
private int count = 0;
public void increment() {
synchronized (this) {
count++;
}
}
public int getCount() {
synchronized (this) {
return count;
}
}
public static void main(String[] args) {
ThreadSafe threadSafe = new ThreadSafe();
new Thread(() -> {
for (int i = 0; i < 10000; i++) {
threadSafe.increment();
}
}).start();
new Thread(() -> {
for (int i = 0; i < 10000; i++) {
threadSafe.increment();
}
}).start();
System.out.println(threadSafe.getCount()); // 20000
}
}
总结
死锁是指两个或多个线程因为互相等待而导致无法继续执行的情况。线程安全是指当多个线程同时访问共享数据时,不会导致数据损坏的情况。
为了避免死锁,我们可以使用锁来同步线程的访问。为了保证线程安全,我们可以使用原子操作或锁来保护共享数据。