Java多线程
Java多线程
小仙。
这个作者很懒,什么都没留下…
展开
-
Java——》volatile
一、volatile作用1、保证 可见性2、禁止 指令重排无法保证原子性!!!:::infoQ:为什么CPU会指令重排?A:CPU会在保证happens-before的前提下,对指令进行重新排序,从而 提高效率:::二、虚拟机的规范:内存屏障为了实现禁止指令重排,JVM虚拟机提出了规范,内存屏障(不同版本的虚拟机,有不同的实现)LoadLoadStoreLoadLoadStoreStoreStore三、hotSpot虚拟机的实现hotSpot虚拟机实现的很简单,在两条指令中原创 2022-05-14 20:51:01 · 144 阅读 · 0 评论 -
Java多线程——》如何保证线程的安全性
Q:如果存在临界(共享)资源,如何保证线程的安全性?A:加锁,怎么做?不加锁,怎么做?1、互斥锁synchronized、Lock(ReentrantLock,ReadWriteLock)2、非阻塞锁CASQ:CAS真的无锁吗?A:Java层面:没锁,基于Unsafe实现底层C++层面: 有锁,lock cmpexchg3、不采用任何锁ThreadLocal:让多个线程将共享资源copy到本地,没有多线程操作共享资源的问题 volatile:只要不包含并发对共享数据进行运算,.原创 2022-05-14 20:48:05 · 510 阅读 · 0 评论 -
Java多线程——》如何合理的分配线程池的大小
在分配线程池容量大小时,必须要根据你的业务类型来决定:CPU密集型,IO密集型,混合型1、CPU密集型特点:更多的CPU在做计算,一直在工作,等待时间很少推荐:线程数少一点一般:CPU内核数+12、IO密集型特点:更多的时候线程在等待响应推荐:线程数多一些一般:CPU内核数 * 2 或者(线程等待时间与线程CPU时间之比 + 1) * CPU数目3、混合型特点:啥任务都有推荐:将CPU密集和IO密集的操作分成2个线程池去执行一般:2个线程池...原创 2022-05-14 20:46:32 · 462 阅读 · 0 评论 -
Java多线程——》如何在线程池执行任务前后做额外处理
try { // 前置增强 beforeExecute(wt, task); try { // 执行任务 task.run(); } catch (Throwable x) { thrown = x; throw new Error(x); } finally { // 后置增强 afterExecute(task, thrown); } } // 继承线程池,重写这2个方法 protected void before.原创 2022-05-13 18:41:15 · 368 阅读 · 0 评论 -
Java多线程——》线程池的拒绝策略
一、接口:RejectedExecutionHandler二、实现类:4个// 1:Abort:抛异常public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString());}// 2:Discard:扔掉,不抛异常,什么都不处理pu原创 2022-05-13 18:35:37 · 151 阅读 · 0 评论 -
Java多线程——》线程池的工作线程
一、什么是工作线程?Java线程池中的工作线程,指的是 Worker对象1、Worker对象Worker其实就是线程池中的一个 内部类 ,继承了 AQS ,实现了 RunnableQ:Worker为什么要继承AQS?A:目的是为了添加标识来判断当前工作线程是否可以被打断!2、ThreadPoolExecutor.addWorker()作用:添加一个Worker对象到线程池中// Runnable:具体要执行的任务,可以为null// boolean:true添加的是核心线程数 fal原创 2022-05-13 18:23:54 · 478 阅读 · 0 评论 -
Java多线程——》线程池的ctl
一、ctl是什么ctl是线程池中一个属性,本质就是int类型的数值高3位:描述 线程池 的状态低29位 :描述 工作线程 的数量二、为什么要用ctl?线程池在执行任务时,需要多次判断线程池状态,来确实任务是否需要执行(以哪种方式执行)三、什么时候会修改工作线程数量?execute()——>addWorker()——>compareAndIncrementWorkerCount()...原创 2022-05-13 18:19:29 · 1478 阅读 · 0 评论 -
Java多线程——》线程池的状态
一、线程池相关源码// RUNNING:线程池在正常工作,可以处理提交的任务!!! private static final int RUNNING = -1 << COUNT_BITS; // 调用线程池的shuwdown()// 从RUNNING -> SHUTDOWN:不接收新的任务,但是会处理线程池内部现有的任务包括队列 private static final int SHUTDOWN = 0 << COUNT_BITS; // 调用线程池的shu原创 2022-05-13 17:18:01 · 97 阅读 · 0 评论 -
Java多线程——》线程池的核心参数、执行流程
一、线程池的核心参数我们使用 ThreadPoolExecutor ,以 手动 的方式构建线程池public ThreadPoolExecutor(int corePoolSize, // 核心线程 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 生存时间 TimeUnit unit, /原创 2022-05-13 16:37:50 · 593 阅读 · 0 评论 -
总结——》【Java多线程】
序号日期标题12022-05-13 Java多线程——》线程的状态原创 2022-05-13 16:16:39 · 90 阅读 · 0 评论 -
Java多线程——》线程的状态
1、新建状态:new一个线程,没还有start2、运行状态(就绪和运行):调用线程的.start方法 1)就绪,调用了start方法,CPU没有分配时间片 2)运行,调用了start方法,CPU正在调度 3、阻塞状态:当竞争synchronized锁时,没拿到,线程挂起 4、等待状态:join,wait,(LockSupport)park方法 5、超时等待状态:Thread.sleep(long),wait(long),join(long),parkNanos(……) 6、死原创 2022-05-13 16:11:32 · 78 阅读 · 0 评论 -
Java多线程——》线程池的创建
Java中提供了基于 Executors 构建线程池的方式直接使用Executors构建会造成对线程池的控制力度很粗必须以 手动 的方式构建线程池public ThreadPoolExecutor(int corePoolSize, // 核心线程 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 生存时间原创 2022-05-11 15:12:46 · 121 阅读 · 0 评论 -
Java多线程——》线程池的状态
// RUNNING:线程池在正常工作,可以处理提交的任务!!! private static final int RUNNING = -1 << COUNT_BITS; // 调用线程池的shuwdown()方法,从RUNNING -> SHUTDOWN ,不接收新的任务,但是会处理线程池内部现有的任务包括队列 private static final int SHUTDOWN = 0 << COUNT_BITS; // 调用线程池的shuwdownNow()方法原创 2022-05-11 15:09:21 · 82 阅读 · 0 评论 -
Java多线程——》线程状态
1、新建状态:new一个线程,没还有start2、运行状态(就绪和运行):调用线程的.start方法 1)就绪,调用了start方法,CPU没有分配时间片 2)运行,调用了start方法,CPU正在调度 3、阻塞状态:当竞争synchronized锁时,没拿到,线程挂起 4、等待状态:join,wait,(LockSupport)park方法 5、超时等待状态:Thread.sleep(long),wait(long),join(long),parkNanos(……) 6、死原创 2022-05-11 14:56:32 · 114 阅读 · 0 评论 -
java——》实现多线程
版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。https://blog.csdn.net/weixin_43453386/article/details/88236004java——》实现多线程 一、继承Thread类1、步骤2、示例代码3、运行结果:二、实现Runnable接口1、步骤2、示例代码3、运行结果:4、总结三、实现Callable...原创 2019-03-06 14:53:49 · 164 阅读 · 0 评论 -
java——多线程
版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。https://blog.csdn.net/weixin_43453386/article/details/88343595序号日期标题12019-03-05 java——》进程 && 线程22019-03-06 解决——》Exception in...原创 2019-03-08 11:13:24 · 254 阅读 · 0 评论 -
java——》ExecutorService
版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。https://blog.csdn.net/weixin_43453386/article/details/88661622java——》ExecutorService一、线程池相关概念1、为什么需要创建线程池2、线程池的好处一、线程池相关概念1、为什么需要创建线程池(1)服务器如果每一个请...原创 2019-04-02 13:53:08 · 787 阅读 · 0 评论 -
java——》CompletableFuture
版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。https://blog.csdn.net/weixin_43453386/article/details/88913809java——》CompletableFuture一、CompletableFuture使用实践1、直接创建CompletableFuture1)创建默认的Completable...原创 2019-04-03 15:27:14 · 214 阅读 · 0 评论 -
java——》进程 && 线程
版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。https://blog.csdn.net/weixin_43453386/article/details/88184422java——》进程 &amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp; 线程 一、车间 &amp;amp;amp;amp;amp;amp;amp;&amp;a原创 2019-03-05 15:33:09 · 147 阅读 · 0 评论