并发学习
文章平均质量分 95
力扣小男孩
菜鸟的进阶之路。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发编程入门
最近在学习慕课网的高并发课程。为面试做准备。这门课程个人感觉讲的不错。有理论,有实践。最好结合《Java并发编程实战》这本书来看。当时看书的时候各种云里雾里。后来看了这门课之后,好多东西感觉都懂了。所以说有一个能用实例把知识讲明白的老师很难得。在开始真正的讲解以前,我们实现一个简单的场景-实现一个计数功能 : CountExample//计数功能@Slf4jpublic class ...原创 2018-12-31 10:38:55 · 162 阅读 · 0 评论 -
Java内存模型简单讲解
在实际讲解并发与高并发之前我们还需要先学习一下Java虚拟机是怎么解决这些问题的;为了屏蔽掉硬件以及各种操作系统的内存访问差异以实现让java程序在各个平台下都能达到一致的并发效果,Java虚拟机规范中定义了Java内存模型(Java Memory model,简称JMM).个人比较推荐《深入理解JVM》中的关于JMM的讲解。很详细了。书中的理论知识,准备面试足够了。1.JMM基...原创 2018-12-31 11:25:36 · 194 阅读 · 0 评论 -
并发的优势与风险
优势:速度:应用并发系统可以同时处理多个请求,等待的时间就会变短,响应就会更快,另一个方面,复杂的操作可以分为多个进程同时操作加快了处理速度;设计:假设一个应用程序需要从本地读取和处理两个文件,如果是都单线程的情况,我们就需要记录每个文件的读取和处理状态,如果使用并发处理,我们就可以启动两个线程,每个线程独立的处理一个文件的读取和操作。资源利用:线程会在处理的时候被阻塞,其他线程可...原创 2018-12-31 11:38:17 · 304 阅读 · 0 评论 -
线程安全性
1.定义当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步和协同,这个类都能够表现出正确的行为,那么就称这个类为线程安全的类; 2.线程安全的体现并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没有被保证,就有可能会导致程序运行不正确。原子性:一个操作或多个操作要么全部执行完成且执行过程不被中...原创 2018-12-31 14:52:14 · 193 阅读 · 0 评论 -
安全发布对象
1.发布与逸出1.1概念发布对象 : 使一个对象能够被当前范围之外的代码所使用;对象逸出 : 一种错误的发布,当一个对象还没有构造完成时,就使他被其他线程所见;1.2代码演示/** * 发布对象 */@Slf4j@NotThreadSafepublic class UnsafePublish { private String[] states = {"a"...原创 2018-12-31 15:05:30 · 237 阅读 · 0 评论 -
线程安全策略
1.不可变对象1.1.不可变对象需要满足的条件:① 对象创建后其状态就不能修改;② 对象所有域都是final类型的;③ 对象是正确创建的(在对象创建期间,this引用没有逸出);1.2. final关键字① final可以用来修改类 方法 变量;② final修饰的类不能被继承(我们平时使用的基础数据类型的类都是final的);③ final修饰方法不能被继承类修改...原创 2018-12-31 15:47:29 · 267 阅读 · 3 评论 -
JUC之AQS
1.AQS简介1.1概念:AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看做是一个可以用来实现锁以及其他需要同步功能的框架。这里简称该类为AQS。AQS的使用依靠继承来完成,子类通过继承自AQS并实现所需的方法来管理同步状态。例如ReentrantLock,CountDownLatch等.1.2底层结构。AQS底层使用的双向链表实现,如下图所示...原创 2018-12-31 16:55:04 · 312 阅读 · 0 评论 -
JUC组件扩展之FutureTask
1.概述FutureTask这个组件是JUC里边的但是它不是AQS的子类;创建线程有两种方式,一种是继承Thread,一种是实现Runnable接口,这两种方式有一个共同的缺陷就是执行完任务以后无法获取执行结果,从JDK1.5开始就提供了Future和Callable通过他们可以在任务执行完毕以后获取结果;2.Callable Future FutureTask使用方法① Callab...原创 2018-12-31 22:14:31 · 186 阅读 · 0 评论
分享