juc
文章平均质量分 52
王佑辉
个人笔记,多谢指正,不喜勿喷
展开
-
【juc】cyclicbarrier人数凑齐发车
【代码】【juc】人数凑齐发车。原创 2023-10-08 21:52:08 · 178 阅读 · 0 评论 -
【juc】future并行执行并获取返回值
【代码】【juc】future并行执行并获取返回值。原创 2023-10-08 20:48:06 · 272 阅读 · 0 评论 -
【juc】countdownlatch实现并发网络请求
【代码】【juc】countdownlatch实现并发网络请求。原创 2023-10-07 22:19:55 · 192 阅读 · 0 评论 -
【juc】countdownlatch实现游戏进度
【代码】【juc】countdownlatch实现游戏进度。原创 2023-10-07 21:28:34 · 275 阅读 · 0 评论 -
【juc】ReentrantReadWriteLock之缓存(仅当学习)
2.先查缓存,没有再去查库。1.针对于读多写少的情况。原创 2023-09-04 14:18:26 · 683 阅读 · 0 评论 -
【juc】读写锁ReentrantReadWriteLock
3.提供一个数据容器类,内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法。2.类似于数据库中的select …lock in share mode。2.不支持重入时升级:持有读锁的情况下去获取写锁,会导致获取写锁永久等待。1.当读操作远远高于写操作时,使用读写锁让读读可以并发,来提高性能。3.支持重入时降级:持有写锁的情况下去获取读锁。1.读写不支持条件变量。原创 2023-08-29 16:44:59 · 1457 阅读 · 0 评论 -
【juc】AQS原理
1.是一个抽象父类,全称是AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架2.用法是同步器类继承该父类,去实现父类的方法,调用同步器类的方法达到加锁、解锁等目的。原创 2023-07-29 21:44:05 · 249 阅读 · 0 评论 -
【juc】自定义连接池
2.连接保活(可用性检测)1.连接的动态增长和收缩。原创 2023-07-09 15:46:04 · 323 阅读 · 2 评论 -
【juc】不可变类DateTimeFormatter
【代码】【juc】不可变类DateTimeFormatter。原创 2023-07-08 21:23:39 · 211 阅读 · 0 评论 -
【juc】Unsafe类
3.Unsafe类不是表面上的线程是否安全的类,因为该类是底层,操作的是内存和线程,不建议编程人员直接使用。1.被final关键字修饰,不能被继承。2.是sun.misc包下。原创 2023-07-07 14:48:19 · 271 阅读 · 0 评论 -
【juc】字段更新器
2.只能配合volatile修饰的字段使用,否则会出异常Exception in thread “main” java.lang.IllegalArgumentException: Must be volatile type。3.常见有AtomicReferenceFieldUpdate、AtomicIntegerFieldUpdate、AtomicLongFieldUpdate。1.利用字段更新器可以针对对象的域(Field)原创 2023-06-29 21:55:36 · 171 阅读 · 0 评论 -
【juc】原子数组
【代码】【juc】原子数组。原创 2023-06-29 11:15:56 · 242 阅读 · 0 评论 -
【多线程】原子引用AtomicMarkableReference
1.标记资源是否被修改。原创 2023-06-14 22:39:17 · 164 阅读 · 0 评论 -
【多线程】原子引用ABA问题
4.如果希望主线程能感知到其它线程动过该共享变量,则cas失败,所以比较值是不能解决问题的,需要再加一个版本号。3.对于主线程仅能判断出共享变量的值与最初值A是否相同,不能感知到A改为B又改回A的情况。2.在这期间,线程1将共享变量由A改为B,线程2再将共享变量B改为A。1.主线程准备将共享变量由A改为C。原创 2023-06-13 21:33:38 · 250 阅读 · 0 评论 -
【juc】原子整数AtomicInteger
【代码】【juc】原子整数AtomicInteger。原创 2023-06-12 21:01:06 · 76 阅读 · 0 评论 -
【多线程】为什么不建议使用Executors来创建线程池?
单个线程线程池创建时FinalizableDelegatedExecutorService用的是装饰器模式,只对外暴露ExecutorService接口,不能调用ThreadPoolExecutor中特有的方法,固定数量线程池对外暴露的是ThreadPoolExecutor对象,可以强转,调用setCorePoolSize等方法进行修改。4.与自己创建的线程的区别:a.自己创建一个单线程串行执行任务,任务执行失败而终止则没有任务不就措施,线程池执行失败会新建一个线程,保证线程池的正常工作;原创 2023-04-22 20:34:00 · 960 阅读 · 0 评论 -
【juc】ReentrantLock可重入锁
2.ReentrantLock的条件变量支持多个,synchronized不满足条件的线程都在同一个waitSet中等待,ReentrantLock可以让不同条件不满足的线程在不同的地方等待。3.可以设置为公平锁:竞争不到锁的线程在等待过程中,当锁释放后,谁先等待的谁先得到锁(先进先出);3.其它线程获取到锁,然后释放锁,只要时间小于tryLock的时间,尝试获取锁还是可以成功的。2.可以设置超时时间:规定时间内,线程1争抢不了锁,可以放弃锁的竞争。1.可中断:线程2可以让线程1获取的锁取消掉。原创 2023-04-09 21:52:27 · 488 阅读 · 0 评论 -
【多线程】哲学家就餐死锁问题
【代码】【多线程】哲学家就餐死锁问题。原创 2023-04-09 13:51:41 · 191 阅读 · 0 评论 -
【juc】LockSupport的park和unpark方法
4.例子1: 在线程1中执行LockSupport.park()后,_counter一开始为0,然后线程1进入_cond等待队列中阻塞,线程2中执行LockSupport.park(线程1)后,线程1在等待队列中阻塞,唤醒线程1,将_counter改为1,线程1恢复运行,再将_counter改为0。3.调用unpark()方法:线程2调用unpark(线程1)方法,如果发现线程1在等待队列_cond中阻塞,便唤醒线程1,并将_counter标识改为1,线程1恢复运行再将_counter标识改为0;原创 2023-04-08 19:53:54 · 282 阅读 · 0 评论 -
【juc】wait和notify原理
6.waitset中的线程1和线程3会在owner指向的线程1调用notify或者notifyAll时唤醒,被唤醒后,不会立刻获得锁,还是要进入entrylist等待下一次竞争。2.线程1在执行的过程中发现条件a不满足执行不下去了,此时线程1可以调用wait方法,那么线程1就进入waitset进行等待,状态为waiting。5.waitset中的线程是获取到了锁,但又主动放弃了锁;3.线程4准备给对象A加锁,发现当前对象A的monitor的owner是线程2,线程4则会进入entryList中准备竞争。原创 2023-04-06 23:09:00 · 268 阅读 · 0 评论 -
【juc】monitor锁
3.锁记录中包含 对象指针(引用地址)和 锁记录地址和轻量级锁标识00,加锁后,对象指针会指向对象A,并且拿锁记录的地址和轻量级锁标识00去交换对象A的对象头的mark word,如果交换成功了,对象A的对象头中的mark word存的是锁记录的地址和轻量级锁标识00,锁记录中存的则是对象A的对象头markword之前存的信息(hashcode、分代gc年龄、是否偏向),该线程则对对象A加上了锁。4.当线程1给对象A上了synchronized锁,对象A关联的monitor的owner则为线程1。原创 2023-04-05 21:26:19 · 549 阅读 · 0 评论 -
【多线程】创建线程有哪几种方式
1.创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值。2.创建Runnable实现类的实例,并将其作为Thread的target来创建Thread对象,Thread对象为线程对象。1.定义Runnable接口的实现类,并实现该接口的run()方法,该run()方法将作为线程执行体。1.定义Thread类的子类,并重写该类的run()方法,该run()方法将作为线程执行体。3.调用线程对象的start()方法来启动该线程。原创 2023-03-26 21:49:47 · 281 阅读 · 0 评论