java补完——多线程(安全、锁同步、并发同步控制与实现)

本文介绍了Java中的多线程安全问题,如线程不安全的集合类,以及如何通过synchronized关键字实现同步锁。讨论了死锁现象,并对比了synchronized与Lock接口的区别。此外,还探讨了并发与并行的概念,以及并发同步控制的策略,包括悲观锁和乐观锁在数据库中的应用。
摘要由CSDN通过智能技术生成

文章说明:黑色字体-已知,蓝色字体-所见即所得,红色字体-还需要再找资料弄明白的,黄色背景-提炼关键信息
参考资料:很多参考资料,段落下有原文链接到原作者

安全问题

多个线程访问统一资源出现的各种情况的问题。
线程不安全:不提供数据访问保护,在多线程环境中对数据进行修改,会出现数据不一致的情况。
线程安全:就是多线程环境中有对全局变量的变动时,需要对执行的代码块采用锁机制,当一个线程访问到某个数据时,其他线程需要等待当前线程执行完该代码块才可执行,不会出现数据不一致或者数据被污染。
以下都是线程不安全的:
1、StringBuilder
2、ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap集合
以下都是线程安全的:
1、StringBuffer
2、Vector、HashTable、Properties集合

同步锁synchronized

用synchronized锁解决线程安全问题。并发的同步则是保证在并发执行的环境中各个控制流可以有效执行,包括对资源的共享或互斥访问,以及代码功能逻辑循序。
线程同步有以下两种方式:
方法一:同步代码块
格式:在代码块声明上,加上 synchronized
注:同步代码块中的锁对象可以是任意对象,但多个线程时,要使用同一个锁对象才能够保证线程安全
总:没有锁的线程不能进入同步,在同步中的线程,不出去同步,就不会释放锁。

synchronized (锁对象) {
   
    可能会产生线程安全问题的代码块
}

方法二:同步方法

  • 普通方法同步
    格式:在方法声明上加上 synchronized
    注:同步方法中的锁对象是 this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值