线程安全
文章平均质量分 71
线程安全
做猪呢,最重要的是开森啦
哈哈哈干活
展开
-
HashMap线程不安全 | 线程安全的 ConcurrentHashMap
0. HashMap是线程不安全的:1. HashTable的线程安全:2. Collections.synchronizedMap(hashMap)的线程安全:3. ConcurrentHashMap的线程安全: 3.1. ConcurrentHashMap 1.7: 3.2. ConcurrentHashMap 1.8:0. HashMap是线程不安全的: JDK1.8之前多线程同时进行put操作,并且同时进行扩容的时候可能会出现环形链表,导致死循环的发生· 【原因】.原创 2021-07-18 22:27:46 · 735 阅读 · 9 评论 -
集合遍历修改ConcurrentModificationException异常
0. 栗子1. 原因解析:1.1. 集合遍历remove非倒数第二个元素,会报异常1.2. 集合遍历remove倒数第二个元素,不会报异常2. 其他遍历写法异常情况:3. 推荐写法:0. 栗子 下述栗子会报ConcurrentModificationException异常` 【原因】:集合迭代遍历中对集合结构修改(添加/移除),modCount值会加1,而预期值expectedModCount不变,便会报异常 public static void main(String[] args).原创 2021-07-06 20:31:54 · 332 阅读 · 1 评论 -
synchronized的类锁和对象锁区别
1. 概念:2. 举个栗子: 2.1. 类锁: 2.2. 对象锁:1. 概念:synchronized修饰静态方法和代码块,会给类加锁;synchronized修饰实例方法,会给实例对象加锁。2. 举个栗子: 2.1. 类锁:两个线程同时访问,由于同步static方法,锁住的是类,所以必须等thread1执行完方法,释放锁后thread2才能进入testA方法。public class runnableThread implements Runnable { @Overrid.原创 2021-03-29 22:41:24 · 733 阅读 · 3 评论 -
Condition的使用 | Semaphore的使用 | 多线程循环打印ABC
1. Condition的使用:主要在Lock中配合Condition对象来实现wait和notify的功能·就像synchronized可以配合wait和notify实现线程在条件不满足时等待,条件满足时唤醒1.1. 主要方法:Condition提供的await()、signal()、signalAll()方法,就像synchronized锁对象的wait()、notify()、notifyAll()一样:await()会释放当前锁,进入等待状态;当然和wait()一样,最好在循环中使原创 2021-02-17 14:57:01 · 425 阅读 · 0 评论 -
线程安全栗子-单例模式中有状态对象线程安全问题
1. 目的:校验产品名2. 问题:线程不安全3. 优化1:加锁4. 优化2:@PostConstruct5. 有状态对象和无状态对象:1. 目的:校验产品名 从别的服务(dataService)中获取产品名称数据,(只获取一次),并封装到List中,校验的时候直接从List中获取数据校验@Controllerpublic class TestController { @Autowired private ProductCheckService productCheckServ.原创 2020-12-22 22:23:24 · 317 阅读 · 3 评论 -
为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?以及为什么使用在while循环里
wait()在同步方法/代码块中调用原因: wait()属于Object方法,调用之后会强制释放当前对象锁,所以在 调用某对象的wait()方法之前,当前线程必须先获得该对象的锁。因此,wait()方法在同步方法/代码块中调用。notify()/notifyAll()在同步方法/代码块中调用原因: 调用wait()后,释放了对象锁,并将线程放入这个对象的等待队列(池),当执行notify()/notif原创 2020-05-14 23:19:58 · 1059 阅读 · 0 评论 -
原子类--AtomicInteger的理解使用及例子
在多线程下对同一资源进行操作(如i++),会产生线程安全问题;我们可以使用synchronized来保证线程安全,但这比较耗性能如果像这类简单的运算,我们可以使用原子类来代替,原子类本身是线程安全的。【举个栗子】:以下栗子,我们启动三条线程对共享变量count进行自增(每个线程任务自增1000),当然我们最后期望线程结束后,自增结果为3000public class Task implements Runnable { private int count; private C.原创 2020-10-16 23:02:44 · 567 阅读 · 0 评论 -
synchronized的理解使用及锁的状态和升级
1. synchronized使用:synchronized作为保证线程安全的常规手段之一,其可以修饰实例方法、静态方法和代码块 修饰实例方法,锁住的是实例对象this 修饰静态方法,锁住的是类对象 修饰代码块,锁住的是括号内的对象2. synchronized的原理 2.1. Monitor每一个对象都关联一个监视器锁(monitor),当monitor被占用时就会处于锁定状态。在Java虚拟机(HotSpot)种,monitor是由ObjectMonitor实现的,内部主要有_原创 2020-10-21 23:00:55 · 475 阅读 · 0 评论 -
ThreadLocal的理解使用,在SimpleDateForma的应用
package com.thread.threadlocal;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/** * @Deacription * @Author LLLing * @Date 2020/10/12 20:33 * @Version 1.0 **/public class JDBCUtil { private static final原创 2020-10-12 22:23:08 · 407 阅读 · 0 评论