java多线程部分概念整理

  1. concurrentHashMap中的size、isEmpty方法使用情况并不多,而且尽可能是一个当前情况的估计值
  2. 当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。临界区,它会产生竞态条件。在临界区中使用适当的同步就可以避免竞态条件。
  3. CopyOnWriteArrayList用于代替同步List,BlockingQueue也可以
  4. BlockingQueue和线程之间有生产者-消费者的概念,降低耦合
  5. LinkedBlockingQueue头和尾是两个不一样的锁,增加了处理的效率。默认无界,可设置参数为有界
  6. 中断将暂停某线程的工作(如果能够中断的话),可以通过方法恢复
  7. FutureTask是Future的一个实例类,可以达到线程间通信的效果
  8. CountDownLatch、信号量通过计数的方式控制时间的流程
  9. CyclicBarrier当一组线程同时达到某一个点的时候,同时放行
  10. Executor的shutdown方法不会接受新任务,但会把队列中已经存放的都执行完
  11. 而shutdownnow直接试图中断当前执行任务,队列中的不管了,通过拒绝策略处理
  12. 线程池可能会出现饥饿死锁的情况,队列中的被正在执行的线程依赖
  13. 哲学家问题,每个人拿一根筷子导致死锁
  14. JVM解决死锁手段没有数据库那么多,往往有可能发生死锁,降低效率
  15. 死锁产生的四个条件:
  16. 互斥条件:一个资源每次只能被一个进程使用。
  17. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  18. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  19. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  20. 避免死锁:加锁顺序、超时释放
  21. 饥饿:优先级阻塞队列,有些任务的优先级太低了导致一直不能执行
  22. 活锁:不能恢复的失败任务以为是能恢复的,放在队列开始再来一遍,结果就是永远执行不下去

猜你喜欢

转载自blog.csdn.net/quinnnorris/article/details/81033896