摘要: public V put(K key, V value) { //在添加元素的时候,会先判断是不是为空,如果为空,那么会调用inflateTable方法。这个方法是把HashMap中的数组大小变成capacity*loadFactor,默认是12 if (table == EMPTY_TABLE) 阅读全文
posted @ 2019-11-28 21:56 泥古拉斯赵四 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 什么是非阻塞算法呢? 在基于锁的算法中可能会发生各种活跃性故障。如果线程在持有锁时由于阻塞IO,内存页缺失或其他延迟而导致推迟执行,那么很可能所有线程都不能继续执行下去。 如果在算法中,一个线程的失败或者挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法。如果在算法的每个步骤中都存在某 阅读全文
posted @ 2019-11-26 22:04 泥古拉斯赵四 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 之前看源代码的时候,发现了有两个方法。一个是compareAndSet,一个是compareAndSwap, 傻傻分不清这两个到底哪个是CAS呢。 我看了java并发编程实战 找到了答案。 CAS 是一种计算机的指令。 CAS包含3个操作数, 需要读写的内存位置V,进行比较的值A和拟写入的新值B。当 阅读全文
posted @ 2019-11-26 21:09 泥古拉斯赵四 阅读(4032) 评论(0) 推荐(0) 编辑
摘要: 首先大家想一想,为什么要有锁分解,锁分段技术。 他们是用来解决什么的 前提: 在并发程序中,对可伸缩性的最主要威胁就是独占方式的资源锁。 可伸缩性 指的是: 当增加计算资源时(例如CPU,内存,存储容器或者IO带宽),程序的吞吐量或者处理能力会相应地增加。 串行操作会降低可伸缩性,并且上下文切换也会 阅读全文
posted @ 2019-11-18 23:03 泥古拉斯赵四 阅读(1357) 评论(0) 推荐(0) 编辑
摘要: Semaphore 用法 在调用accquire之后到release之间,别的线程会阻塞,当然前提是信用量已经没有可用的了。 1 package com.citi.test.mutiplethread.demo08; 2 3 import java.util.concurrent.Executor; 阅读全文
posted @ 2019-11-14 19:53 泥古拉斯赵四 阅读(424) 评论(0) 推荐(0) 编辑
摘要: Executor 是一个接口,只定义了一个方法, 可以接收Runnable实例,用来执行一个实现Runnable接口的任务。 void execute(Runnable command); ExecutorService 也是一个接口,继承自Executor,并增加了一些方法,用的比较广泛,提供了一 阅读全文
posted @ 2019-10-11 23:48 泥古拉斯赵四 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 在有限时间内执行任务的主要困难在于,要确保得到答案的时间不会超过限定的时间,或者在限定的时间内无法获得答案。在支持时间限制的Future.get中支持这种需求;当结果可用时,它将立即返回,如果在指定时限内没有计算出结果,那么将抛出TimeoutException。 在使用限时任务时需要注意,当这些任 阅读全文
posted @ 2019-10-10 23:40 泥古拉斯赵四 阅读(1249) 评论(0) 推荐(0) 编辑
摘要: 我们来想一个问题: 如果向Executor提交了一组计算任务,并且希望在计算完成后获得结果,那么我们可以保留与每个任务关联的Future,然后反复使用get方法,从而通过轮询来拿到返回结果,但是这样有些繁琐。 而ExecutorCompletionService可以简化这个操作。这就是他的作用,可以 阅读全文
posted @ 2019-10-09 23:48 泥古拉斯赵四 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 接上一篇文章,https://www.cnblogs.com/liumy/p/11633065.html wait方法是让当前线程等待,这里的当前线程不是指t,而是主线程。 wait会释放锁,等到其他线程调用notify方法时再继续运行。 可以看下面的例子。 下面是执行结果。 可以看到synchro 阅读全文
posted @ 2019-10-08 21:13 泥古拉斯赵四 阅读(7356) 评论(0) 推荐(0) 编辑
摘要: Thread join方法 表示等待线程的结束。但是到底是谁等待谁呢? 是main主线程等待线程t执行完毕再执行。 下面看个例子。 可以看到main线程会等待thread1和thread2线程执行完毕再执行。 如果没有thread1.join(), thread2.join(),那么结果会是这样。 阅读全文
posted @ 2019-10-08 00:00 泥古拉斯赵四 阅读(485) 评论(0) 推荐(0) 编辑