码迷,mamicode.com
首页 > 编程语言 > 详细

java concurrent包常用类小结

时间:2016-09-07 12:50:21      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:

concurrent包是常用多线程的相关包,最近由于开发sdn程序,对于多线程使用比以前多了很多,现简单总结下。

第一类  原子类:用在多个线程共同操作一个计数的情况

AtomicLong

AtomicInteger

 

第二类 lock和condition

condition是从lock中得到的,所以在使用时,在执行了lock.lock()后才进行condition的操作,condition常用的两个方法await和signal。

常用在多个线程操作一个共同的资源,一个线程执行结束后,另一个线程才能执行的情况。

另外,lock应该代替以前的synchronized关键字。synchronized属于jvm层面的同步策略,由jvm进行锁的分配和释放。但是据说高并发量时,需要频繁切换线程栈,性能不好。

从今以后,代码中应该使用lock实现同步。

 

第三类  多线程任务执行ExecutorService

这部分大体上涉及到三个概念,

Callable     被执行的任务
Executor  执行任务()
Future      异步提交任务的返回数据 FutureTask为具体实现

线程资源是系统很珍贵的资源,的确不应该由程序员随意的new Thread方式,自己启动线程。如果项目上有自己的框架,应该使用项目框架中的线程工具,如果没有最好使用jdk提供的ExecutorService工具类。

常见的线程池

  1. ExecutorService cachedThreadPool = Executors.newCachedThreadPool();   -- 超时会销毁池中的线程
  2. ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);   -- 线程池中的线程即使空闲也不销毁
  3. ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();  
  4. ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3); -- 能够定时执行任务的线程池,比如可以用在数据采集功能,每隔一小时执行一次

第四类  工具类 

比如 CyclicBarrier, CountDownLatch 用来协调多个线程,执行顺序的

第五类  线程安全的集合类 比如BlockingQueue ConcurrentMap

 

java concurrent包常用类小结

标签:

原文地址:http://www.cnblogs.com/juniorMa/p/5848705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!