随笔分类 - java并发包-底层实现和原理研究
摘要:https://www.ibm.com/developerworks/cn/java/j-jvmc2/index.html http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html http://colobu.com/2016
阅读全文
摘要:引用: 1.http://www.infoq.com/cn/articles/the-importance-of-thread-pool-in-java-web-application --infoQ 线程池调优方案 2.http://www.importnew.com/22554.html --
阅读全文
摘要:1.控制并发线程数的Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,保证合理的使用公共资源。 线程可以通过acquire()方法来获取信号量的许可,当信号量中没有可用的许可的时候,线程阻塞,直到有可用的许可为止。线程可以通过release()
阅读全文
摘要:1.CyclicBarrier 字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时候,屏障才会开门。所有被屏障拦截的线程才会运行。 2.常用的方法: 3.底层原理实现 CyclicBarrier是由Reen
阅读全文
摘要:CountDownLatch 是一个同步工具类,允许一个线程或者多个线程等待其他线程完成操作,再执行。 CountDownLatch和CyclicBarrier的区别: (1).CountDownLatch 的作用是允许1或者多个线程,等待另外N个线程完成某件事情之后,这1个或者多个线程才能执行。C
阅读全文
摘要:项目中经常使用定时器,比如每隔一段时间清理下线过期的F码,或者应用timer定期查询MQ在数据库的配置,根据不同version实现配置的实时更新等等。但是timer是存在一些缺陷的,因为Timer在执行定时任务时只创建一个线程,所以如果存在多个任务,比如两个,第一个任务执行的时间很长,超过两个任务执
阅读全文
摘要:1.什么是可重锁ReentrantLock? 就是支持重新进入的锁,表示该锁能够支持一个线程对资源的重复加锁。底层实现原理主要是利用通过继承AQS来实现的,也是利用通过对volatile state的CAS操作+CLH队列来实现; 支持公平锁和非公平锁。 CAS:Compare and Swap 比
阅读全文
摘要:1.什么是AQS? AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。 2.同步器的应用 同步器主要使用方式是继承,子类通过继承同步器
阅读全文
摘要:1.计算机内存模型的相关概念原理 计算机在执行程序时,每条指令都是在CPU中执行的,在指令的执行过程中,涉及到数据的读取和写入。由于程序在运行的过程中数据是放在"主存"中的, 由于数据从主存中读取数据和写入数据要比CPU执行指令的速度慢的多,如果任何时候对数据的操作都需要通过和主存进行交互,会大大降
阅读全文
摘要:ArrayBlockingQueue的原理和底层实现的数据结构 : ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,可以按照 FIFO(先进先出)原则对元素进行排序。 线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的
阅读全文
摘要:ConcurrentHashMap结构图如下: ConcurrentHashMap实现类图如下: segment的结构图如下: 参考文章: 1.https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/ 2.http:/
阅读全文
摘要:概述 HashMap是非线程安全的,HashTable是线程安全的。 那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。今天我们将深入剖析一个比HashTable性能更优的线程
阅读全文
摘要:ThreadFactory翻译过来是线程工厂,顾名思义,就是用来创建线程的,它用到了工厂模式的思想。它通常和线程池一起使用,主要用来控制创建新线程时的一些行为,比如设置线程的优先级,名字等等。它是一个接口,接口中只有一个方法: 下面定义MyThreadFactoryTest1类实现ThreadFac
阅读全文
摘要:Java并发编程:线程池的使用 Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需
阅读全文
摘要:Spring中的ThreadPoolTaskExecutor是借助于JDK并发包中的java.util.concurrent.ThreadPoolExecutor来实现的。基于ThreadPoolExecutor可以很容易将一个Runnable接口的任务放入线程池中。 ThreadPoolExecu
阅读全文

浙公网安备 33010602011771号