高并发与多线程
文章平均质量分 84
高并发与多线程
帅过驴的袋鼠
这个作者很懒,什么都没留下…
展开
-
并发编程与高并发(七):多线程并发拓展
一、死锁二、并发最佳实践使用本地变量 因为线程封闭导致线程安全使用不可变类 一旦创建就无法改变,保证线程安全最小化锁的作用域范围使用线程池的Executor,而不是new Thread执行宁可使用同步也不要使用线程的wait和notify使用BlockingQueue实现生产-消费模式使用并发集合而不是加了锁的同步集合使用Semaphore创建有界的访问宁可使用同步代码块,也不使用同步方法使用sync...原创 2021-10-26 21:49:55 · 89 阅读 · 0 评论 -
并发编程与高并发(六):线程调度-线程池
介绍所谓线程池,通俗的理解就是有一个池子,里面存放着已经创建好的线程,当有任务提交给线程池执行时,池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时,则需要自动扩充新的线程到池子中,但是该数量是有限的,就好比池塘的水界限一样。当任务比较少的时候,池子中的线程能够自动回收,释放资源。为了能够异步地提交任务和缓存未被处理的任务,需要有一个任务队列。new Thread弊端每次new Thread新建对象,性能较差线程缺乏统一管理,可能无...原创 2021-10-19 22:01:52 · 757 阅读 · 0 评论 -
并发编程与高并发(五):JUC之组件扩展
FutureJava创建线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口,这两种方式有一个共同的缺陷,那就是在执行完任务之后,无法获取执行结果。从Java1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果,Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他事情。(因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果)Callable与Runnable先说一下java.lang.R原创 2021-10-14 15:09:52 · 114 阅读 · 0 评论 -
并发编程与高并发(四):JUC之AQS
一、介绍在JDK1.6之前,synchronized这个重量级的同步锁性能一直都是较为低下,虽然在1.6之后,进行了大量的锁优化策略,但是与Lock相比synchronized还是存在缺陷的。虽然synchronized提供了便捷性的隐式获取锁、释放锁的机制(基于JVM机制),但是它缺缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为独占式的锁在高并发场景下性能大打折扣。AQS是 AbstractQueuedSynchronizer 的缩写,也就是抽象队列同步器,它是JUC并发包下面的核心组原创 2021-10-08 20:17:13 · 218 阅读 · 0 评论 -
并发编程与高并发(三):线程安全策略
一、不可变对象二、线程封闭三、线程不安全类与写法四、同步容器原创 2021-09-22 15:17:40 · 388 阅读 · 0 评论 -
并发编程与高并发(二):安全发布对象
发布对象使一个对象能够被当前范围之外的代码所使用的叫做发布对象import java.util.Arrays;/** * 多线程的场景下无法保证其他线程对states的修改,所以这个对象是线程不安全的 */public class PublishNotSafe { private String[] states = {"a", "b", "c"}; public String[] getStates() { return states; }原创 2021-09-22 14:53:33 · 95 阅读 · 0 评论 -
并发编程与高并发(一):线程安全性
一、概览1.1什么是线程安全当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。1.2线程安全原子性:是指一次或者多次操作中,要么所有的操作全部都得到了执行并且不会受到任何因素的干扰而中断,要么全部回滚。可见性:一个线程对主内存的修改可以及时的被其他线程观察到。有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察记过一般杂乱无序。二、原原创 2021-09-07 17:40:54 · 687 阅读 · 0 评论