云计算百科
云计算领域专业知识百科平台

【JavaSE】【多线程】synchronized和死锁

目录

  • 一、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

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【JavaSE】【多线程】synchronized和死锁
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!