摘要: 单线程就不说了因为简单,并且 在实际的生产环境中一般必须来说 线程资源都是由线程池提供线程资源的。 线程池的好处 重用存在的线程,减少对象创建、消亡的开销,性能好 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞。 提供定时执行、定期执行、单线程、并发数控制等功能。 阅读全文
posted @ 2018-10-01 17:05 爱呼吸的鱼 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 因为下一节会说线程池,要用线程池 那么线程池有个很重要的参数 就是Queue的选择 常用的队列其实就两种: 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。从某种程度上来说这种队列也体现了一种公平性。 后进先出(LIFO):后插入队列的元素最先出队列,这种队列优先处理最近发生 阅读全文
posted @ 2018-09-26 19:30 爱呼吸的鱼 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 大部分时候创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。但是这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 Stream API可以声明性的通过parallel()与sequential()在并行流与穿行流中随意切换! 阅读全文
posted @ 2018-09-24 23:59 爱呼吸的鱼 阅读(473) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock与synchronized的区别 ReentrantReadWriteLock的使用 锁的选择 阅读全文
posted @ 2018-09-24 00:49 爱呼吸的鱼 阅读(309) 评论(0) 推荐(0) 编辑
摘要: AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类。它实现了一个FIFO(FirstIn、FisrtOut先进先出)的队列。底层实现的数据结构是一个双向列表。 CyclicBarrier 和 CountDownLatch的比较: CountDownLatch: 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。--> 反正 你执行完 就ok.不能随意放开 CyclicBarrier: N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。--> 可以到到某个条件.我放开就行了 CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset() 方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。 CountDownLatch:减计数方式,CyclicBarrier:加计数方式 信号量(Semaphore),有时被称为信号灯,是在多 阅读全文
posted @ 2018-09-22 22:49 爱呼吸的鱼 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 平时大家都会经常使用到 Map,面试的时候又经常会遇到问Map的,其中主要就是 ConcurrentHashMap,在说ConcurrentHashMap.我们还是先看一下, 其他两个基础的 Map 类: HashMap 和 TreeMap HashMap: TreeMap: 这个异常意在提醒开发者 阅读全文
posted @ 2018-09-21 23:11 爱呼吸的鱼 阅读(2982) 评论(0) 推荐(0) 编辑
摘要: Map大家族的那点事儿(1) :Map Map大家族的那点事儿(2) :AbstractMap Map大家族的那点事儿(3) :TreeMap Map大家族的那点事儿(4) :HashMap Map 大家族的那点事儿 ( 5 ) :WeakHashMap Map 大家族的那点事儿 ( 6 ) :Li 阅读全文
posted @ 2018-09-21 22:13 爱呼吸的鱼 阅读(125) 评论(0) 推荐(0) 编辑
摘要: java.util.concurrent是JDK自带的一个并发的包主要分为以下5部分: 并发工具类(tools) 显示锁(locks) 原子变量类(aotmic) 并发集合(collections) Executor线程执行器 我们今天就说说 并发集合,除开 Queue,放在线程池的时候讲 先介绍以 阅读全文
posted @ 2018-09-20 23:33 爱呼吸的鱼 阅读(436) 评论(0) 推荐(1) 编辑
摘要: 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。 下面的理解可能会易懂一些: {概念:不可变类的 阅读全文
posted @ 2018-09-19 21:29 爱呼吸的鱼 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭。 它其实就是把对象封装到一个线程里,只有一个线程能看到这个对象,那么这个对象就算不是线程安全的,也不会出现任何线程安全方面的问题。 二 线程封闭技术有一个常 阅读全文
posted @ 2018-09-19 20:22 爱呼吸的鱼 阅读(385) 评论(0) 推荐(0) 编辑