随笔分类 - 多线程
摘要:一、线程安全 1. 怎样让多线程下的类安全起来 无状态、加锁、让类不可变、栈封闭、安全的发布对象 2. 死锁 2.1 死锁概念及解决死锁的原则 一定发生在多个线程争夺多个资源里的情况下,发生的原因是每个线程拿到了某个(某些)资源不释放,同时等待着其他线程所持有的资源。 解决死锁的原则就是确保正确的获
阅读全文
摘要:一、项目背景和问题 有一个自适应的考试学习系统,对学员的学习要求经常考试进行检查,学员的成绩出来以后,老师会要求系统根据每个学员的考卷上错误的题目从容量为10万左右的题库中抽取题目,为每个学员生成一套各自个性化的考后复习和练习的离线练习册。所以,每次考完试,特别是比较大型的考试后,要求生成的离线文档
阅读全文
摘要:一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。 2. 使用线程池的好处 a) 降低资源的消耗。使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池空闲的时候可以去执行T1和T2,从而
阅读全文
摘要:一、并发容器 1.ConcurrentHashMap 为什么要使用ConcurrentHashMap 1. HashMap是线程不安全的,在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%。 HashMap在并发执行put操作时会引起死循环,是因为多线程会导致
阅读全文
摘要:什么是AbstractQueuedSynchronizer?为什么我们要分析它? AbstractQueuedSynchronizer(AQS):抽象队列同步器 抽象队列同步器原理:当多个线程去获取锁的时候,如果获取锁失败了,获取锁失败的当前线程就会被打包成一个node节点放入同步队列里面使用Loc
阅读全文
摘要:有了synchronized为什么还要Lock? 因为Lock和synchronized比较有如下优点,这些特点是synchronized没有的 1、 尝试非阻塞地获取锁 2、 获取锁的过程可以被中断 3、 超时获取锁 多长时间拿不到锁就放弃 Lock的使用范式: 1 package com.lgs
阅读全文
摘要:什么是原子操作 不可被中断的一个或者一系列操作 count++并不是一个原子操作,存在从内存读count,然后把count+1,再把加1后的值刷回内存三个操作步骤 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 循环CAS:在一个(死)循环【for(;;)】里不断进行CAS操作
阅读全文
摘要:概念 多线程的用途:多线程一般用来处理高并发 什么叫高并发:通过设计保证系统能够并行处理很多请求 高并发关注的指标: 响应时间:用户能够快速拿到响应结果 吞吐量:单位时间内处理多少个请求 每秒查询率 并发用户数 什么是线程:运行程序会创建一个进程。进程里面包含多个线程,操作系统(OS)调度的最小单元
阅读全文