多线程
文章平均质量分 80
小辉笔记
热爱编程,热爱生活
展开
-
Java多线程--volatile关键字
简单理解就是当cpu修改了volatitle修饰的变量的值时 会立刻刷新到主内存区中,保证其他cpu操作时时最新值。在java编译的时候,会对加有volatitle关键字的变量 读写操作前加上jvm的内存屏障指令,保证。CPU在操作内存时,因为cpu高速内存的传输效率(寄存器)要比内存的效率快得多,如上,即使加上 volatile关键字,多线程的情况下,count数还是会有问题。多核CPU 为了提升CPU效率,设计了L1,L2,L3三级缓存,如图。例如 i++ 就可分为 读取,修改,写回,并非一个整体。原创 2024-06-01 21:31:17 · 398 阅读 · 0 评论 -
并发编程----线程池与future
线程池业务场景分为IO密集型和CPU密集型IO密集型通常 存在线程等待阻塞 线程池最大线程数配置为2×CPU核数CPU密集型通常 不存在等待,每个线程过来都会运行的 线程数最大线程数配置为CPU核数线程池执行原理执行顺序当线程数小于核心线程数时,创建线程。当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。当线程数大于等于核心线程数,且任务队列已满1若线程数小于最大线程数,创建线程2若线程数等于最大线程数,抛出异常,拒绝任务为什么等待队列要使用阻塞队列因为使原创 2020-09-21 15:35:34 · 279 阅读 · 0 评论 -
Java 多线程 ----死锁与线程的使用
死锁各个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行。而导致俩个或多个线程都在等待对方释放资源,都停止执行的情况最常见的 一个线程拿到了筷子在等待事务,另一个线程拿到了食物在等待筷子。俩个人都不释放,则造成死锁不要在synchronized里面用synchronized 这样容易造成死锁。产生死锁的四个条件互斥条件 一个资源只能被一个线程占有请求和保持条件 一个进程因请求资源而阻塞时,对已获得的资源保持不放不剥夺条件 进程未获得的资源在未使用完之前,原创 2020-09-01 09:58:36 · 152 阅读 · 0 评论 -
Java多线程---了解AQS
AQS (abstractQueuedSynchroizer)抽象队列同步器synchronized 1.5的改进synchronized是重量级锁。但是在java1.5后对synchronized进行了改进synchronized锁在初始是偏向锁,当有其他线程竞争时升级成为轻量级锁,(多数情况下是自旋锁) 当自旋超过10次将会升级成为重量级锁为什么synchronized是重量级锁synchronized锁 需要jvm调用操作系统(OS),然后需要cpu在用户态(user mode)原创 2020-08-27 18:32:09 · 99 阅读 · 0 评论 -
Java深入了解多线程
Java多线程程序 进程 线程线程vs进程方法嵌套调用 vs 多线程线程创建的俩种基本方法Thread的常用方法构造方法常用方法守护线程创建线程的其它三种扩展方式方式1---TimerTask + Timer方式2---Callable + FutureTask方式3---利用线程池线程的生命周期<6> <重点>描述线程的内部枚举类---Thread.State获取线程状态的方法线程定时任务调度线程同步synchronized关键字有俩种使用方式同步代码块和同步方法的区别 重点JD原创 2020-07-25 09:49:50 · 130 阅读 · 0 评论