
并发编程
坤少_jkson
别再用廉价的勤奋掩饰你的懒惰
展开
-
LinkedBlockingQueue的put,add跟offer的区别
LinkedBlockingQueue的put,add和offer的区别 最近在学习Java并发编程实践>>,有很多java.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。 看其API的时候发现,添加元素的方法竟然有三个:add,put,offer转载 2017-02-06 16:38:36 · 352 阅读 · 0 评论 -
Java 8 函数式编程 例子汇总
在 Java 程序中采用函数式方法和语法有许多好处:代码简洁,更富于表达,不易出错,更容易并行化,而且通常比面向对象的代码更容易理解。我们面临的挑战在于将思维方式从命令式编程 — 绝大多数开发人员都熟悉它 — 转变为声明式思考。尽管函数式编程不那么容易或直观,但您可以通过学习关注您想要程序实现的目的 而不是关注您希望它执行的方式,从而实现思维上的巨大飞跃。Java 8 Examples...原创 2018-12-27 15:18:53 · 1180 阅读 · 0 评论 -
在使用线程池等会缓存线程的组件情况下传递ThreadLocal
最近开发的系统有一个场景在多个RPC调用链中需要传递一些公有参数过去。这个时候首先想到的是ThreadLocal,但是有一个问题就是它不能在父子线程中传递上下文信息(ThreadLocal变量信息),这时我们考虑用InheritableThreadLocal,它可以解决父子线程中上下文的传递,但是又发现一个问题,InheritableThreadLocal在线程池复用的组件里无法复制,最后我们...原创 2018-09-30 14:56:34 · 763 阅读 · 0 评论 -
线程阻塞工具类LockSupport
LockSupport是一个线程阻塞工具,它可以在线程内的任意位置让线程阻塞,和Thread.suspend()相比,它弥补了resume()在前发生导致线程无法继续执行的情况,和Object.wait()相比它也不需要获取某个对象锁。LockSupport使用了类似信号量的机制,它为每一个线程准备了一个许可,如果该许可可用,会立即返回,并且消费这个许可,如果许可不可用,线程就会阻塞代码实例...原创 2018-07-22 18:06:21 · 285 阅读 · 0 评论 -
回顾总结一下JDK高并发的包(集合、多线程、锁)
转载于http://blog.youkuaiyun.com/yangbutao/article/details/84795201、java 高并发包所采用的几个机制(CAS,volatile,抽象队列同步) CAS(乐观操作),jdk5以前采用synchronized,对共享区域进行同步操作,synchronized是重的操作,在高并发情况下,会引起线程频繁切换;而CAS是一种乐观锁机制,comp...转载 2016-11-20 18:03:16 · 1084 阅读 · 0 评论 -
可重入锁ReentrantLock
可重入锁ReentrantLock可以完全替代synchronized,在JDK5之前,synchronized太重,而可重入锁性能远远好于synchronized,从JDK6后,JDK团队对synchronized做了大量的优化以至于把这2个锁的性能差异不是很大.至于可重入锁的命名是因为这种锁在同一个线程可以反复进入,也就是可以调用lock()方法多次,当然也必须调用同样次数的unlo...原创 2018-07-22 17:06:19 · 148 阅读 · 0 评论 -
Java对象中等待(wait)和通知(notify)
JDK在Object对象中提供了2个非常重要的接口线程方法wait方法和notify方法,也就是所有Java对象都有这2个方法,意思就是当在一个实例Java对象上调用wait方法,那么当前线程就会从执行状态转变成等待状态,同时释放在实例对象上的锁,直到其它线程在刚才那个实例对象上调用notify方法并且释放实例对象上的锁,那么刚才那个当前线程才会再次获取实例对象锁并且继续执行。这样我们...原创 2018-07-22 11:23:57 · 24533 阅读 · 13 评论 -
错误的加锁(初学者常犯的错误)
我们常常在程序中使用多线程来处理任务,这个时候是否正确使用加锁就很重要了,有时候看着代码没啥问题,但是执行起来发现结果并不是看到的那样,比如我们看下面的代码package me.lishuo;/** * @date 2018/7/21 下午5:10 */public class WrongLockOnInteger implements Runnable { p...原创 2018-07-21 17:35:15 · 801 阅读 · 1 评论 -
40个Java多线程问题总结
前言个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因转载 2017-09-24 16:17:13 · 312 阅读 · 0 评论 -
关于Guava中令牌桶算法RateLimiter的理解
我们系统现在架构是收到mq消息,先放到redis队列,然后再从redis队列取任务去消费,当上游刷数据的时候,redis队列任务就会非常多,这个时候我们在消费的时候既要考虑redis的稳定性,也要考虑调用下游资源所能提供资源能力。对于资源受限、处理能力不是很强的资源应当给予保护(在下游资源无法或者短时间内无法提升处理性能的情况下)。可以使用限流器或者类似保护机制,避免下游服务崩溃造成整体服务的不可原创 2017-07-12 18:12:20 · 2053 阅读 · 0 评论 -
线程池调整真的很重要
知道吗,你的Java web应用其实是使用线程池来处理请求的。这一实现细节被许多人忽略,但是你迟早都需要理解线程池如何使用,以及如何正确地根据应用调整线程池配置。这篇文章的目的是为了解释线程模型——什么是线程池、以及怎样正确地配置线程池。单线程模型让我们从一些基础的线程模型开始,然后再随着线程模型的演变进行更深一步的学习。你使用的任何应用服务器或框架,如To转载 2017-05-10 22:13:08 · 1641 阅读 · 1 评论 -
IO多路复用select,poll epoll以及区别
看这个一次读懂 Select、Poll、Epoll IO复用技术 文章来简单理解下,如果不是很明白的话,可以参考下面转的知乎上面白话文列子作者:Leslie链接:https://www.zhihu.com/question/32163005/answer/76577586来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。要弄清问题 先要知道问题的出现原因...转载 2019-02-19 18:46:42 · 4051 阅读 · 0 评论