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 Web(八) MVC和三层架构
    Java Web(九) 用户管理系统
    Java Web(十一) 分页功能的实现
    hibernate(四) 双向多对多映射关系
    合并两个排序的链表
    反转链表
    链表中倒数第k个结点
    堆排序
    计算机网络常见面试题
    字节对齐原则
  • 原文地址:https://www.cnblogs.com/juniorMa/p/5848705.html
Copyright © 2011-2022 走看看