目录
- 一、synchronized详解
-
- 1.1 互斥
- 1.2 可重入
- 二、死锁
-
- 2.1 死锁成因
- 2.2 避免死锁
一、synchronized详解
1.1 互斥
synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待.
语法:
synchronized(变量){
//修改操作
}
()括号内的变量不重要,作用是区分加锁对象是否一样,如果对同一个对象加锁,那么两个操作就会产生“blocked”锁竞争阻塞问题,后一个线程就会等到前一个线程解锁再执行。 进入左大括号 ‘{’ 就是加锁,出了右大括号 ‘}’ 就是解锁。
写一个例子,就会出现预期结果10000:
public class Demo7 {
private static int ret;
public static void main(String[] args) throws InterruptedException {
Object block = new Object();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 5000; i++) {
synchronized (block){
ret++;
}
}
});
Thread thread2
评论前必须登录!
注册