
多线程
文章平均质量分 73
jzq1999
这个作者很懒,什么都没留下…
展开
-
利用ThreadLocal记录日志
在项目中记录日志是必须的,但是往往在记录日志的时候都是通过logger.debug("...")来记录的,程序一边运行一边记录日志,尤其在多线程或者Web应用中,同一时间可能有不同的日志记录到同一个文件中去,当出现错误的时候就不能确定在那些信息是你想关心的.因此如果我们在一个程序的开始的地方开始记录日志,但是这个日志不记录到日志文件中,而是保存在一个ThreadLocal中,在出...原创 2008-10-29 22:31:23 · 319 阅读 · 0 评论 -
volatile的线程安全性
volatile关键字可以及时把变量的修改写入主存,每个线程读取值的时候都必须从主存读取,这样做保证了可见性,但其安全性在多线程环境并不能获得保证。 下面的code是为了获取加到1000次后的数字:public class Counter { public static volatile int count = 0; public static v...原创 2015-02-06 17:17:52 · 392 阅读 · 0 评论 -
单例模式在多线程环境下的实现
在多线程环境中,单例模式可能会创建多个实例,如果使用synchronized关键字来修饰getInstance方法,又造成访问该方法的性能变慢。 如何解决这个问题? 1. 采用急切实例化,直接把属性实例化。private static Singleton uniqueInstance = new Singleton(); ...原创 2015-02-06 00:16:56 · 134 阅读 · 0 评论 -
servlet3的异步特性
Servlet3 比 Servlet2.4最大的进步应该是异步支持了,不再像过去那样,对于每个请求,只有一个线程在处理,必须等待这个线程阻塞处理完毕后,才能给 client 返回响应。 使用异步处理,新开一条线程处理耗时的 task,这样线程不会一直堵塞,可以接着处理其他的client请求。 此处有一误区,需要澄清的是,Servlet...原创 2015-01-29 01:09:10 · 190 阅读 · 0 评论 -
Semaphore使用
Semaphore(信号量),通常用来限制可以访问资源的线程数量,使他们能够正确、合理地使用公共资源。比如1个餐厅最多可容纳10人就餐,多余的人就需要等位。Semaphore的acquire方法用来获取一个资源的许可,release方法用来释放一个资源的许可。/** * Semaphore demo:一个餐厅同时可容纳10人吃饭,多余的人将会排队等候 * * @autho...原创 2015-01-18 00:55:59 · 131 阅读 · 0 评论 -
CyclicBarrier的用法
CyclicBarrier,是一个同步辅助类,可以实现让一组线程互相等待,直到某一状态后(common barrier point公共屏障点)再全部同时执行(并发动作)。 而且barrier在释放等待线程后可以重复使用,所以称为循环的barrier。 CyclicBarrier支持可选的runnable命令,在一组线程的最后一个线程到达...原创 2015-01-14 00:15:06 · 103 阅读 · 0 评论 -
CountDownLatch的用法
CountDownLatch,是线程同步辅助类,在一组执行线程中有未完成的线程时,可以让已完成的线程一直等待其他线程完成。设计理念有点类似于团队爬山,前队等后队,人到齐后才算爬山任务完成。 下面的例子模仿有两个人abtest和unittest,两个人跑步,只有两个人都跑完后,才是真正的跑步结束,才打印跑步结束语句,所以打印跑步结束语句的动物要在两个人(线程)跑完步...原创 2015-01-13 02:27:40 · 83 阅读 · 0 评论 -
ThreadPoolExecutor源码分析
线程请求的处理逻辑:当新任务提交过来时1. 若正在运行的线程数量少于corePoolSize,就新建一个线程来执行任务,即使其他的线程都是空闲状态。 2. 若corePoolSize和maximumPoolSize相同,则创建的线程池是大小固定的。3. 当正在运行的线程数量超过corePoolSize而小于maximumPoolSize时,如果workQueue已满,就新建一个...原创 2015-01-08 23:21:26 · 101 阅读 · 0 评论 -
线程池
WHAT线程池是一种池化技术,初始化时创建一定数量的线程放入池中,当外界请求调用线程时,直接从池中取出可用线程进行业务处理,用完放回池中。 WHY线程池因为在初始时创建了一定数量的线程,这样减少了创建线程的资源开销,对于高并发需求来说,对于提高性能、减少系统CPU的计算开销,大有好处。特别是针对应用请求来得急,要求处理快场景,如果每一个请求创建一个新线程则导致性能问题。...原创 2012-11-08 16:33:32 · 81 阅读 · 0 评论 -
MINA入门使用
MINA作为高效能的可应对高并发访问的NIO框架,特性就不多介绍了。下面提供一些使用的实例。服务器端代码:/** * Description 用来启动MINA服务端 * @author Administrator * 2012-10-21 */public class MinaTimeServer { protected static Logger logger...原创 2012-10-21 17:37:07 · 130 阅读 · 0 评论 -
Servlet线程安全性解析
Servlet:单实例多线程,也可以认为是单进程多线程的运行在容器中。线程不安全,因为被多个线程访问一个实例,共享的数据可能会发生安全问题。 每个客户端访问Servlet时,都是一个独立的线程。 概述 在探讨java线程安全前,让我们先简要介绍一下Java语言。 任何语言,如C++,C#,Java,它们都有相通之处,特别是语法,...原创 2009-11-02 17:46:49 · 146 阅读 · 0 评论 -
认识ThreadLocal
ThreadLocal 实例相当于线程私有变量的容器,为每个访问线程存储了一个对应的变量值,做到了线程访问的隔离性。功能类似于洗澡间的衣柜,每个线程相当于一个人,每个柜子相当于私有变量。每个人都有洗澡间的一个柜子,这个柜子只能本人使用,别人不能使用。ThreadLocal类将每个线程实例和变量以K-V方式存储了下来,这样在每个线程访问get方法的时候,从Map中查询对应的Val...原创 2009-10-20 12:10:02 · 126 阅读 · 0 评论 -
ThreadLocal 源码分析
ThreadLocal字段意义为线程本地,其实表达不够准确,应该为线程本地变量或线程局部变量更合适一些。ThreadLocal 常用来存储每个线程的私有信息,相当于是线程组的私有变量容器,每个变量值为单一线程私有,不被其他线程共享。ThreadLocal类的方法解析: protected T initialValue() { return null;...原创 2016-10-30 00:16:40 · 119 阅读 · 0 评论