java.util.concurrent 在shorturl项目中的应用

问题:微博短链项目应用到哪些concurrent包中的类,类的用途是什么?场景是怎样?效果?

  1. java.util.concurrent.atomic.AtomicInteger ( AtomicLong) 用途:可以用原子方式更新的 int 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。 (jdk文档) 场景:ThreadPoolExecutor的成员变量,记录等待线程数,确保不超出最大线程数 效果:正常,保证不超出
  2. java.util.concurrent.ThreadPoolExecutor 用途:一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors工厂方法配置。 线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。  (jdk文档) 场景:启动高中低优先级的Executor,设置不同的最大线程数,最大等待数执行不同级别任务;如异步修复短链ext信息,异步读取mcq数据入库入缓存 效果:正常,应对每日数千万级写入请求;但三种executor的设置让人困惑,maxPriorityExecutor的大小和minPriorityExecutor一样,normalPriorityExecutor却是最大的线程和等待数?
  3. java.util.concurrent.LinkedBlockingQueue 用途:一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。  (jdk文档) 场景:ThreadPoolExecutor的构造成员变量 效果:不明,是否如jdk doc写的性能较差待研究。用ConcurrentLinkedQueue 是否更好? 有空测试之(http://blog.csdn.net/arkblue/article/details/6151488 两者的性能比较;http://yanxuxin.iteye.com/blog/586943 多线程基础总结10,11)
  4. java.util.concurrent.locks.ReentrantLock 用途:一个可重入的互斥锁 Lock,它具有与使用 synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁并返回。如果当前线程已经拥有该锁,此方法将立即返回。可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。  synchronized缺点 a.只有一个"条件"与锁相关联,这对于大量并发线程的情况是很难管理(等待和唤醒);b.多线程竞争一个锁时,其余未得到锁的线程只能不停的尝试获得锁,而不能中断 场景:创建memcache client建立连接时加锁,避免多次创建socket
  5.  java.util.concurrent.ConcurrentHashMap
  6. java.lang.ThreadLocal 用途:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。 场景:用于对每个线程创建dao对象,做更新操作。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

史上最全 Java 多线程面试题及答案

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所...

981
来自专栏Java编程

40个Java多线程问题总结

个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的...

6101
来自专栏Golang语言社区

Go语言基于共享变量的并发

一个特定类型的方法和操作函数是并发安全的,那么所有它的访问方法和操作都是并发安全的。导出包级别的函数一般情况下都是并发安全的,package级的变量没法被限制在...

3954
来自专栏架构师小秘圈

40个多线程问题总结

作者:五月的仓颉 来自:cnblogs.com/xrq730/p/5060921.html ? 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会...

3947
来自专栏微信公众号:Java团长

40个Java多线程问题总结

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所...

1493
来自专栏Golang语言社区

Go语言基于共享变量的并发

一个特定类型的方法和操作函数是并发安全的,那么所有它的访问方法和操作都是并发安全的。导出包级别的函数一般情况下都是并发安全的,package级的变量没法被限制在...

2874
来自专栏Java编程

40个Java多线程问题总结

个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的...

2K5
来自专栏玄魂工作室

看代码学PHP渗透(3) - 实例化任意对象漏洞

大家好,我们是红日安全-代码审计小组。最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫 PHP-Audit-Labs 。...

7211
来自专栏Java技术栈

史上最全 Java 多线程面试题及答案

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所...

821
来自专栏顶级程序员

40个多线程问题总结

源 / 架构师小秘圈 文 / 五月的仓颉 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回...

4057

扫码关注云+社区

领取腾讯云代金券