Java并发编程总结_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java并发编程总结

Java并发编程总结

 2014/3/26 6:59:58  milagro  程序员俱乐部  我要评论(0)
  • 摘要:Executors?这是一种任务分解。任务提供者和执行者?在本线程内完成,或者交给专门的Executor去执行。BlockingQueue?常用的工具类,用于数据流分解?读取阻塞,插入阻塞(可选)?ArrayBlockingQueue–FIFO,有上限?LinkedBlockingQueue–FIFO,可能有上限?PriorityBlockingQueue–按优先次序
  • 标签:总结 Java 编程 Java并发
  • Executors
    ?这是一种任务分解。任务提供者和执行者
    ?在本线程内完成,或者交给专门的Executor去执行。
  • BlockingQueue
    ?常用的工具类,用于数据流分解
    ?读取阻塞,插入阻塞(可选)
    ?ArrayBlockingQueue
    –FIFO,有上限
    ?LinkedBlockingQueue
    –FIFO,可能有上限
    ?PriorityBlockingQueue
    –按优先次序,无上限
    ?SynchronousQueue
    –Rendezvous channel
  • Future任务提供者和执行者之间的一种通讯机制
    ?等到任务执行结束(或者等待一段时间)
    ?取消任务
    ?等待时执行错误通知
    ?获取执行结果
    ?这种机制成为Future,这是一个很关键的概念,在并发程序中使用,能使程序清晰化,而且功能完备。在各种并发的库中均有提供类似的概念。Futue也用于异步同步的场景。
    Future已经是一个很流行的线程间通讯工具类,在很多网络并发的库中均有使用
  • DelayQueue用于以下场景
    ?关闭空闲连接
    ?清空缓存中的Item
    ?任务超时处理
    ?替代笨笨的后台线程定时挨个检查的方式
    ?DelayQueue是一个使用优先队列(PriorityQueue)实现的BlockingQueue,优先队列的比较基准值是时间。
  • 如果深入 JVM 和操作系统,会发现非阻塞算法无处不在。垃圾收集器使用非阻塞算法加快并发和平行的垃圾搜集;调度器使用非阻塞算法有效地调度线程和进程,实现内在锁。
  • Exchanger
    ?结合数据分解和数据流分解的一种技巧
    ?可以在两个线程之间交换数据,只能是2个线程,不支持更多的线程之间互换数据
  • synchronized
    ?使用简单
    ?性能低下。比使用ReentrantLock性能要低得多
    ?调试监控不方便,无法得知“锁”拥有者线程
  • Lock
    ?更加灵活,性能更好
    ?支持多个Condition
    ?可以不以代码块的方式上锁
    ?可以使用tryLock,并指定等待上锁的超时时间
    ?调试时可以看到内部的owner thread,方便排除死锁
  • RenntrantLock
    ?一个可重入的互斥锁定 Lock,它具有与使用synchronized所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大
    ?支持fair和unfair两种模式?更加灵活,性能更好
  • ReadWriteLock允许多个读,一个写
  • Semaphore, CountDownLatch, CyclicBarrier这些工具类都很简单,属于并发流程控制的典型手段
  • Atomic
    ?基于CPU硬件提供的TSL指令
    ?基本思想是compare and set(CAS)作为原子操作
    ?通常和一个忙等待结合使用,CAS操作时需要一个回退机制
    ?非阻塞算法的基础
    ?Lock-free数据结构以此作为基础,获得更好的并发性能。
  • Lock-free数据结构
    ?提供compare and set操作
    ?使用者不需要锁
    ?并发性能更好
    ?在并发情况下,更容易使用,不容易出错
上一篇: Java 中的预定义 Annotation 类型 下一篇: 没有下一篇了!
发表评论
用户名: 匿名