
多线程高并发
文章平均质量分 62
zsl小萌新
这个作者很懒,什么都没留下…
展开
-
Executor线程池接口
为避免线程消耗过多资源影响性能,(创建与启动线程,线程销毁,线程调度的开销,线程数量受限于CPU处理器数量),使用线程池来管理线程:避免一任务创建一线程带来的开销和性能问题,预先创建好可供使用可复用的线程,客户端将任务以对象传递给线程池,线程池将任务缓存到等待队列中,线程池不断抽取一个可使用的线程从队列取出执行任务。隐式实现了Executor的()向线程池提交任务封装好的常用方法:(底层通过实现ExecutorService)原创 2023-09-21 12:00:43 · 75 阅读 · 0 评论 -
ReentrantReadWriteLock--ReadWriteLock显示锁系列( 手动管理锁)
写前线程共享,写时排他锁,允许多个线程同时读取共享数据,但一次只允许一个线程对共享数据进行更新,当一个线程持有读锁/写锁时,其他线程都无法获得写锁。显示锁(手动锁 手动管理锁 功能更多):通过java.concurrent.locks.Lock接口的实现类。和lock的区别是,lock只支持排他模式,独占共享资源,而读写锁同时具有共享模式和排他模式。内部锁(自动锁 JVM管理):通过synchronized关键字实现。另外在此基础之上,支持公平锁,具有可重入性。().lock();().lock();原创 2023-09-15 18:01:55 · 71 阅读 · 1 评论 -
ReentrantLock --- Lock显示锁系列( 手动管理锁)
内部锁(自动锁 JVM管理):通过synchronized关键字实现显示锁(手动锁 手动管理锁 功能更多):通过java.concurrent.locks.Lock接口的实现类允许同一线程重复获得该锁不会出现死锁等问题(synchronized就是可重入的)公平锁:synchronized默认是非公平锁,公平锁能保证先请求锁的线程拿到锁,避免线程饥饿问题等待过久,但是需要维护有序队列产生额外开销,据情况使用new ReentrantLock(boolean) true开启公平锁。原创 2023-09-14 11:09:09 · 89 阅读 · 1 评论 -
ThreadLocal线程变量隔离
初始化TL值 ThreadLocal t=ThreadLocal.withInitial( ()->值) );将指定的共享变量,变为每个线程创建一个独立的共享变量的副本,线程可以独立地修改自己所拥有的变量副本,互不干扰。(共享变量: 静态变量,线程传递变量,共享对象的属性,volatile变量等):某线程访问ThreadLocal对象时,就是访问当中对应的自己的副本。2、实例需要在多个方法中共享,但不希望被多线程共享。t.remove()当前线程清空值,避免内存泄漏。原创 2023-09-12 17:31:32 · 91 阅读 · 0 评论