
Java并发编程
文章平均质量分 80
和大黄
这个作者很懒,什么都没留下…
展开
-
消费者模式的三种实现方式
1、使用2、使用jdk原创 2014-08-20 22:16:34 · 2256 阅读 · 0 评论 -
如何合理地估算线程池大小
转自http://ifeve.com/how-to-calculate-threadpool-size/先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:如何设计线程转载 2016-07-26 11:25:44 · 1785 阅读 · 0 评论 -
ConcurrentHashMap复合操作问题
ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如Hashtable和Collections.synchronizedMap。实际上,线程安全的容器,特别是Map,应用场景没有想象中的多,很多情况下一个业务会涉及容器的多个操作,即复合操作,并发执行时,线程安全的容器只能保证自身的数据不被破坏,但无法保证业务的行为是否正确。举个例子:统转载 2017-03-11 21:39:48 · 4049 阅读 · 1 评论 -
使用ThreadLocal解决多线程的并发问题
<br /> <br />早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。<br />当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。<br />从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。<原创 2010-10-19 11:00:00 · 2264 阅读 · 0 评论 -
Actor模型
1、背景处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保持共享数据正确性这个问题呢?其实无论是使用数据库锁还是多线程,这里有一个共同思路,就是将数据喂给线程,数据是被动的,自身不复杂,没有自身业务逻辑要求。适合大数据处理或互联网网站应用等等。但是如果数据自身要求有严格的一致性,也就是事务机制,数据就不能被动被加工,要让数据自己有行为能力保护实现自己的一致性。要让数据自己有行为维护自己...转载 2018-03-09 10:45:53 · 5068 阅读 · 0 评论 -
guava LoadingCache学习
guava LoadingCache学习简介使用Guava Cache可以保证只让一个线程去加载数据(比如从数据库中),而其他线程则等待这个线程的返回结果。这样就能避免大量用户请求穿透缓存。但是也有一个很致命的缺陷:如果缓存过期,恰好有多个线程读取同一个key的值,那么guava只允许一个线程去加载数据,其余线程阻塞。这虽然可以防止大量请求穿透缓存,但是效率低下。使用refreshAfter...原创 2019-05-31 18:33:25 · 3318 阅读 · 0 评论 -
JUC中线程池的使用
ThreadPoolExecutorThreadPoolExecutor的完整构造方法的签名是:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory,原创 2014-08-23 23:42:01 · 3955 阅读 · 1 评论 -
ReentrantLock
自从JDK5开始,有两种机制来屏蔽代码块在并行访问的干扰,synchronized关键字已经介绍过了部分内容,所以这次简单的说说另一种锁机制:ReentrantLock。 对于synchronized的缺点之前也简单的说了一些,实际使用中比较烦扰的几点是:a.只有一个"条件"与锁相关联,这对于大量并发线程的情况是很难管理(等待和唤醒);b.多线程竞争一个锁时,其余未得到锁的线程只能不停的尝试获得锁,而不能中断。这种情况对于大量的竞争线程会造成性能的下降等后果。JDK5以后提供了ReentrantLo原创 2010-06-15 20:48:00 · 1358 阅读 · 0 评论 -
Java多线程 --- join
<br /> <br />join 可以安排先后顺序了.如果要先完成t1, 再运行t2, 最近运行t3,就可以这样了<br />t1.start();<br />t1.join();<br />t2.start();<br />t2.join();<br />t3.start()<br /> <br />JDK是这样说的:<br />Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait f原创 2011-03-09 15:22:00 · 2007 阅读 · 0 评论 -
Java 多线程之 interrupt(1)
以前一直以为线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门.在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段.不但不是让线程停止运行,反而是继续执行线程的手段.对于执行一般逻辑的线程,如果调用调用它的interrupt()方法,那么对这个线程没有任何影响,比如线程a正在执行: while(条件) x ++;这样的语句,如果其它线程调用a.interrupt()原创 2011-03-16 20:16:00 · 3699 阅读 · 2 评论 -
Java 多线程之 interrupt(2)
interrupt会导致"线程的中断",但是它并不能保证"中断线程"。这里说的"中断线程"意思是"停止线程",而为什么不用"停止线程"这个说法呢?因为线程有一个明确的stop方法,但它是反对使用的,所以请大家记住,在java中以后不要提停止线程这个说法,忘记它!为什么不用"停止线程"的理由.[停止线程] 当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,并抛出特殊的ThreadDeath()异常.这里的"立即"因为太"立即"了,就象一个正在摆弄自己的玩具的孩子,听到大人说快去睡原创 2011-03-16 21:00:00 · 3124 阅读 · 0 评论 -
Callable,Runnable比较及用法
编写多线程程序一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得(3)call方法可以抛出异常,run方法不可以(4)运行Callable任务可以转载 2014-02-11 13:55:30 · 27131 阅读 · 1 评论 -
CAS原理分析
一、锁机制常用的锁机制有两种:1、悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。悲观锁的实现,往往依靠底层提供的锁机制;悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。2、乐观锁:假设不会发生并发冲突,每次不加锁而是假设没有冲突而去完成某项操作,只在提交操作时检查是否违反数据完整性。如果因为冲突失败就重试,直到成功为止。乐观锁大多是基于数据原创 2014-02-26 14:03:07 · 18245 阅读 · 1 评论 -
synchronized,wait 与 notify
wait,它可以让同步方法或者同步块暂时放弃对象锁,而将它暂时让给其它需要对象锁的人(这里应该是程序块,或线程)用。调用对像wait方法后,当前线程释放对像锁,进入等待状态.直到其他线程(也只能是其他线程)通过notify唤醒方法,或 notifyAll.该线程重新获得对像锁.在Java编程语言中只是暂时放弃对象锁,暂时给其它线程使用,我wait所在的线程还是要把这个对象锁收回来的呀.第一种方法,限定借出去的时间.在wait()中设置参数,比如wait(1000),以毫秒为单位,就表明我只借出去1秒中,一秒原创 2010-06-15 16:59:00 · 1594 阅读 · 0 评论 -
Java5 java.util.concurrent 实现线程池
http://www.ibm.com/developerworks/cn/java/j-zhanghz/级别: 初级瞩 张黄 (zhanghuangzhu@gmail.com), 软件工程师2006 年 1 月 18 日Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java5中更加容易,灵活。本文通过一个网络服务器模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列,可重入锁等,还实践了Cal转载 2010-06-15 20:49:00 · 2590 阅读 · 0 评论