上一页 1 2 3 4 5 6 7 8 9 ··· 28 下一页
摘要: 一:AQS概念 AQS是java.util.concurrent包的一个同步器,它实现了锁的基本抽象功能,支持独占锁与共享锁两张方式, 独占锁:同一时刻只允许一个线程方法加锁资源,例如:ReentrantLock 共享锁:同一时刻允许多个线程方法资源,例如:countDownLatch 二:数据结构 阅读全文
posted @ 2020-03-24 11:36 warrior1234 阅读(901) 评论(0) 推荐(0) 编辑
摘要: 1:死锁 多个线程(至少2个)竞争多个(至少2个)独占资源时,例如:线程1 占有 资源a,同时又去申请资源b, 线程2占有资源b,同时又去申请a,这样线程1 和 2 就会出现死锁,如果没有外力的情况下,这种情况永远不会解开。 发生死锁必须具备的条件: a:独占资源 资源必须是互斥的,同一时刻只能有有 阅读全文
posted @ 2020-03-20 21:09 warrior1234 阅读(163) 评论(0) 推荐(0) 编辑
摘要: git常用命令: 1:git clone url 从远程仓库拉取代码, url为远程仓库的地址 2:git branch -a 查看本地分支和远程分支 3:git checkout branchname 切换分支 4:git remote add branchname url 远程创建一个分支 br 阅读全文
posted @ 2020-03-19 14:49 warrior1234 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 一:cpu密集型任务与IO密集型任务 如果想合理的配置线程池,就需要了解我们任务的类型,是CPU密集型还是IO密集型, CPU 密集型任务主要时间花费在计算上面,内存、硬盘、网络占用的时间少于cpu本身计算的时间,这时应配置尽可能小的线程, 避免线程之间频繁的切换消耗资源,如配置 Ncpu+1 个线 阅读全文
posted @ 2020-03-19 14:08 warrior1234 阅读(1064) 评论(0) 推荐(0) 编辑
摘要: 一:概念 PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。默认情况下元素 采取自然顺序升序排列。也可以自定义类实现 compareTo()方法来指定元素排序 规则, 或者初始化 PriorityBlockingQueue 时,指定构造参数 Comparator 来对元素 阅读全文
posted @ 2020-03-19 11:18 warrior1234 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 一:概念 LinkedBlockingQueue是一个用链表实现的有界阻塞队列。此队列的默认和最大长度为 Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序。 与ArrayBlockingQueue的异同: ArrayBlockingQueue: 必须设置长度容量 底层数组结 阅读全文
posted @ 2020-03-18 16:29 warrior1234 阅读(3075) 评论(0) 推荐(1) 编辑
摘要: 一:对列的基本概念 1:对列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行 删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受 限制的线性表。 进行插入操作的端称为队尾,进行删除操作的端称为队头。 在队列中插入一个队列元素称为入队,从队列中删除一个 阅读全文
posted @ 2020-03-18 11:49 warrior1234 阅读(720) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal的思想是以空间换时间,而锁的思想是以时间换空间,threadLocal的实现就是讲成员变量的副本拷贝到自己的线程内部, 因为不同的线程之间是隔离的,所以可以通过这种方式实现线程安全。 先来看一个示例: /** * 分析ThreadLocal类的实现原理 * 我们解决线程安全问题 阅读全文
posted @ 2020-03-16 22:04 warrior1234 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 为了提供落库效率,项目组决定采用多线程并发落库,但是出了问题,数据一条没有落下来。 1:怀疑时mysql数据库发生了死锁 使用这个命令查看是否有表被锁住了,发现没有表被锁 2:于是查看线程池中的10条线程在做什么 使用jstack查看进程的堆栈信息 线程池的最大线程数和核心线程数配的都是10 ,队列 阅读全文
posted @ 2020-03-07 21:38 warrior1234 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 1:继承Thread类创建线程 现象:创建线程的第一种方式,继承Thread,重写run方法,如果直接调用run方法,则和调用普通方法一样,不会创建线程 结果显示是 main线程调用 如果调用start,是 Thread-0 调用 调用run方法,很简单,MyThread类继承Thread,重写了r 阅读全文
posted @ 2020-03-07 14:30 warrior1234 阅读(1211) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 28 下一页