多线程
蓝胖子的白日梦
只有不断向前奔跑,才能停在原地...
展开
-
java重入锁的实现方法
为每个锁关联一个获取计数值和一个所有者线程。当计数值为零时,这个锁就被认为是没有被任何线程所持有,当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并将获取计数值置为1。如果同一个线程再次获得这个锁,计数值将递增,而当线程退出同步代码块时,计数器会相应的递减,这个锁将被释放。 ...原创 2018-08-20 18:18:40 · 395 阅读 · 0 评论 -
java线程池配置(ThreadPoolTaskExecutor)
corePoolSize : 线程池维护线程的最少数量,哪怕是空闲的。maximumPoolSize :线程池维护线程的最大数量。keepAliveTime : 线程池维护线程所允许的空闲时间。unit : 线程池维护线程所允许的空闲时间的单位。workQueue : 线程池所使用的缓冲队列,改缓冲队列的长度决定了能够缓冲的最大数量。拒绝任务:拒绝任务是指当线程池里面的线程数量达到 m...原创 2018-08-20 18:24:39 · 960 阅读 · 0 评论 -
获取当前正在运行的所有线程组
private Thread[] findAllThreads() { ThreadGroup group = Thread.currentThread().getThreadGroup(); ThreadGroup topGroup = group; /* 遍历线程组树,获取根线程组 */ while (group != null) { t...原创 2018-08-31 14:49:44 · 3509 阅读 · 0 评论 -
内存屏障的四种类型
LoadLoad屏障:抽象场景:Load1; LoadLoad; Load2Load1 和 Load2 代表两条读取指令。在Load2要读取的数据被访问前,保证Load1要读取的数据被读取完毕。 StoreStore屏障:抽象场景:Store1; StoreStore; Store2Store1 和 Store2代表两条写入指令。在Store2写入执行前,保证Store1的...原创 2018-09-05 16:20:20 · 3079 阅读 · 0 评论 -
【多线程】1、进程和线程的区别
进程和线程的由来:1、串行:初期的计算机智能串行执行任务,并且需要长时间等待用户输入2、批处理:预先将用户的指令集中成清单,批量串行处理用户指令仍然无法并发执行3、进程:进程独占内存空间,保存各自运行状态相互间不干扰并且可以互相切换,为并发处理任务提供了可能4、线程:共享进程的内存资源,相互间切换更快速,支持更细粒度的任务控制,使进程内的子任务得以并发执行进程与线程的区别...原创 2019-03-19 21:06:36 · 330 阅读 · 0 评论 -
【多线程】2、Thread和Runnable是什么关系
Thread是一个类,Runnable是一个接口 Thread类实现Runnable接口 Runnable接口仅有一个run()抽象方法,故并无多线程特性,依赖于Thread类的start方法来创建一个子线程,在子线程里调用Thread实现好的run方法去执行相应的逻辑 因为java的单一集成原则,推荐使用Runnable接口...原创 2019-03-19 21:22:07 · 312 阅读 · 0 评论 -
【多线程】3、如何实现处理线程的返回值
初始实例:public class CycleWait implements Runnable { private String value; public static void main(String[] args) { CycleWait cycleWait = new CycleWait(); Thread thread = new...原创 2019-03-19 21:58:52 · 1337 阅读 · 0 评论 -
【多线程】4、notify和notifyall的区别
等待池: 假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入到了该对象的等待池中,进入到等待池中的线程不会竞争该对象的锁。notify和notifyall的区别:notifyAll会让所有处于等待池中的线程全部进入锁池去竞争获取锁的机会。 notify只会随机选取一个处于等待池中的线程进入锁池去竞争获取锁的机会。...原创 2019-03-24 16:25:27 · 200 阅读 · 0 评论