随笔分类 - 多线程
线程竞争 锁 多任务提交
摘要:分布式之数据库缓存双写一致性方案解析
阅读全文
摘要:synchronized在使用的时候底层细节你了解吗,相信很多同学对细节很少关注;比如竞争失败了的线程怎么安置,每个对象的监视器,线程执行synchronized时,其实是获取对象的监视器才能进入同步代码,如果没有获取监视器 则会进入同步队列等待,等获取监视器的线程释放锁,然后同步队列的线程会重新尝试获取对象监视器,这个过程也蛮重要
阅读全文
摘要:java内置锁实现锁住代码块方案一般有两个方案
1.多线程只操作一个对象
2.锁住XX.class实现, 每次只有一个对象进入方法
synchronized(this) 以及非 static 的 synchronized 方法,只能防止多个线程同时执行同一个对象的同步代码块。即 synchronized 锁住的是括号里的对象,而不是代码块
阅读全文
摘要:CyclicBarrier适用于这样的情况:你希望创建一组任务,它们并行的执行工作,然后在进行下一步步骤之前等待,直至所有任务都完成,它使得所有的并行任务都将在删栏出列队,因此可以一致的向前移动。
当调用await时 指定的任务运行完后会awiat 直到最后一个线程运行完毕,才继续执行下一步动作
用法和countDownLatch差不多 countDownLatch只触发一次,而CyclicBarrier可以多次重用
阅读全文
摘要:LockSupport.park LockSupport.unpark
阅读全文
摘要:多线程并行threadPool且通过countDownLatch即所谓的闭锁控制线程最终的终止状态 ;方便统计最终处理数 及花费的业务时间
阅读全文
摘要:在JAVA多任务并行执行的开发过程中,笔者有一点疑惑
corePoolSize maximumPoolSize 这几个参数跟OS具体关系是什么呢?
我线程JAVA的线程与内核的线程关系梳理一下,清楚了原理会比较好理解。
因为从JMM层面 JVM线程其实最终是一个所谓轻量级进程的概念与系统内核线程(每个内核线程视为内核的一个分身)是一比一的关系,其实最终还是要调用内核线程 内核通过操纵调度器对线程进行分配资源,负责将任务给各个处理器上处理;
所以这个线程数还是受限于OS层面的线程数,明白这个就OK。所以最大线程数不是越大越好 过大也没什么作用还是要根据OS本身的参数进行适配。
像上面的corePoolSize如果处理的各个任务理论上马上就能完成 其实不用设置的过大,尽量复用线程
maximumPoolSize最大就是OS内核线程数 超过这个也没什么意义
阅读全文
摘要:发布定义:
指一个对象可以在对象的作用域范围以外使用。
溢出定义:
当某个不应该发布的对象被发布时称为溢出。
阅读全文
摘要:从原理上讲其实Thread.yeild方法其实只是给线程调度机制一个暗示:我的任务处理的差不多了,可以让给相同优先级的线程CPU资源了;不过确实只是一个暗示,没有任何机制保证它的建议将被采纳
阅读全文
摘要:JAVA提供了一种内置锁的机制来支持原子性,同步代码块。同步代码块分两部分组成:1)一个是作为锁的对象引用2)由这个锁保护的代码块
注意点:以关键字sync...修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。
阅读全文
摘要:通过关闭线程底层资源关闭类似synchronized及IO阻塞的情况
阅读全文
摘要:wait,notify,notifyAll
阅读全文
摘要:如果某个线程在另一个线程t上调用t.join;那么此线程将被挂起,直到目标t线程的结束才恢复即t.isAlive返回为假
阅读全文
摘要:如果你想在任务返回后带一个返回值,可以实现Callable接口 , executorService.submit返回带结果的future对象[执行了call方法后返回 , 调用get会一直阻塞直到结果返回
阅读全文