zoukankan      html  css  js  c++  java
  • java concurrent包常用类小结

    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 基础
    ruby on rails
    try catch 与 return 和 finally 关系。
    Oracle 左连接,右连接,内链接。【百度知道】
    java单例模式【csdn-炸死特】
    <jsp:include>和<%@include file=""%>有什么区别?
    List list = new ArrayList()和ArrayList list = new ArrayList()的区别?
    面向连接与面向无连接
    单​工​,​半​双​工​,​全​双​工​的​含​义​及​区​别
    对于java中接口的作用与理解
  • 原文地址:https://www.cnblogs.com/juniorMa/p/5848705.html
Copyright © 2011-2022 走看看