java io 并发_java-fly

java-fly

介绍

线程安全,线程封闭,线程调度,同步容器,并发容器,AQS, J.U.C

高并发解决方案与手段

扩容,缓存,队列,拆分

服务降级与熔断,数据库切库,

并发:多个线程操作相同资源,保证线程安全,合理使用资源

高并发:服务能同时处理很多请求,提高程序性能

工具

postman

apache bench (ab):apache附带的工具,测试网站性能

jmeter:apache组织开发的压力测试工具

代码:semaphore,countdownlatch等

线程安全性

原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作

可见性:一个线程对主内存的修改可以及时的被其他线程观察到

有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序

可见性:导致共享变量在线程间不可见的原因

线程交叉执行

重排序结合线程交叉执行

共享变量更新后的值没有在工作内存与主内存间及时更新

sychronized:jvm对它的规定

线程解锁前,必须把共享变量的最新值刷新到主内存

线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值(注意:加锁与解锁是用一把锁)

volatile:通过加入内存屏障和禁止重排序优化来实现

对volatile变量写操作是,会在写操作后加入一条store屏障指令,将本地内存中的共享变量值刷新到主内存

对volatile变量读操作是,会在读操作前加入一条load屏障指令,从主内存中读取共享变量

volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作

适用于状态check

线程池的好处

重用存在的线程,减少对象创建,消亡的开销,性能佳

可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞

提供定时执行,定期执行,单线程,并发数控制等功能

线程池-threadPoolExecutor

corePoolSize:核心线程数量

maximumPoolSize:线程最大线程数

workQueue:阻塞队列,存储等待执行的任务

当线程数小于corePoolSize就会创建新的线程

当大于corePoolSize小于maximumPoolSize

只有当workQueue满的时候,才会创建新的线程

线程池合理配置

cpu密集 cpu+1

Io密集 2*cpu

ReentrantLock(可重入锁)和synchronized 区别

可重入性

锁的实现

性能的区别:之前synchronized性能比ReentrantLock差很多,但是引入偏向锁和轻量级锁(自寻锁)

功能区别

ReentrantLock独有的功能

可指定是公平锁还是非公平锁:所谓公平锁是指的先来的先得到锁

提供了一个condition类,可以分组唤醒需要唤醒的线程

提供能够中断等待锁的线程的机制,lock.lockInterruptibly();

是一种自旋锁,通过循环调用 cas来实现加锁

Synchronized是非公平锁

死锁

互斥条件

请求和保持条件

不剥夺条件

环路等待条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值