并发编程
Stream_who
慢慢成长,从不停歇
ps:博客最后面的参考网址,都是我看过比较好的,所以放上去的,那才是精华。。
展开
-
spring的线程安全
一、有状态和无状态1. 有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的2. 无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的二、Spring中的有状态(Stateful)和无状态(Stateless)1. 无状态1)无状态的B...原创 2019-11-14 10:41:35 · 249 阅读 · 0 评论 -
多线程并发最佳实践
1. 使用本地变量1) 尽量使用本地变量,而不是创建一个类或实例的变量2. 使用不可变类1)不可变类比如String Integer等一旦创建,不再改变,不可变类可以降低代码中需要的同步数量3. 最小化锁的作用域范围:1)任何在锁中的代码将不能被并发执行,如果你有5%代码在锁中,那么根据Amdahl's law,你的应用形象就不可能提高超过20倍,因为锁中这些代码只能顺序执行,降低锁...原创 2019-11-14 10:40:44 · 316 阅读 · 0 评论 -
线程池
一、基本概念1. Thread的弊端1)每次 new Thread() 新建对象,性能差2)线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或OOM3)缺少更多的功能,如更多执行、定期执行、线程中断2. 线程池的好处1)重用存在的线程,减少对象创建、消亡的开销,性能佳,降低资源消耗2)可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过...原创 2019-11-14 10:36:34 · 223 阅读 · 0 评论 -
JUC组件拓展
一、FutureTask1. 概述1)FutureTask这个组件是J.U.C里面的,但不是AQS的子类,但是这个类对线程处理的结果很值得我们学习和在项目中使用2)在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,在Java 1.5之后提供了Callable和Future接口,通过它们就可...原创 2019-11-14 10:33:54 · 170 阅读 · 0 评论 -
JUC之AQS
一、基本概念1. AbStractQueuedSynchronizer类,简称AQS,一个用来构建锁和同步器的框架,定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch2. 从JDK1.5开始,引入了并发包,也就是J.U.C,大大提高了JAVA程序的并发性能,而AQS则是J.U.C的核心,是并发...原创 2019-10-29 16:39:35 · 196 阅读 · 0 评论 -
线程安全策略
一、不可变对象创建后状态不能被修改的对象叫作不可变对象。不可变对象天生就是线程安全的。它们的常量(变量)是在构造函数中创建的,既然它们的状态无法被修改,那么这些常量永远不会被改变——不可变对象永远是线程安全的1. 不可变对象需要满足的条件1)对象创建以后其状态就不能修改2)对象所有域都是final类型3)对象是正确创建的(在对象创建期间,this引用没有逸出)2. finalf...原创 2019-10-29 16:36:22 · 249 阅读 · 1 评论 -
并发编程与线程安全
一、基本概念1. 线程安全:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类是线程安全的2. 线程安全性体现:1)原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作2)可见性:一个线程对主内存的修改可以及时的被其他线程观察到3)有序性:一个线程观察其他线程...原创 2019-10-29 16:25:08 · 184 阅读 · 0 评论 -
并发相关知识
一、并发与高并发理解1. 并发1)同时拥有两个或者多个线程,如果程序在单核处理器上运行多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行2)多个线程操作相同的资源,保证线程安全,合理使用资源2. 并行1)系统中有多个任务同时存在可称之为“并发”,系统内...原创 2019-10-29 16:22:43 · 143 阅读 · 0 评论