![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA多线程与高并发
君陌先生
努力我要努力
展开
-
Java ForkJoinPool: 3秒计算100万的阶乘
Java ForkJoinPool: 3秒计算100万的阶乘原创 2020-12-31 14:28:56 · 856 阅读 · 0 评论 -
JAVA多线程与高并发(九)[JMH入门了解,Disrupter]
link-JAVA多线程与高并发系列[前言,大纲,目录]JMHJava Microbenchmark Harness,Java为基准测试套件, 官网2013年首发,由JIT开发人员开发,归于OpenJDK,用来量化性能创建JMH测试创建Maven项目,添加依赖 <!-- https://mvnrepository.com/artifact/org.open...原创 2020-03-20 13:42:58 · 941 阅读 · 0 评论 -
JAVA多线程与高并发-线程池如果不用了没有关闭,会导致内存溢出和资源浪费吗?
先说结论:如果线程池中有核心线程,且是核心线程不会在空闲时被回收(默认allowCoreThreadTimeOut=false)那么就会导致核心线程一直阻塞在获取任务上,该核心线程不会结束,GC也不会回收,很可能会导致内存溢出.同时也会导致其他系统资源浪费,因为那些核心线程都在获取任务时阻塞着.反之,如果线程池没有核心线程,或者线程池设置了核心线程可以在空闲时被回收,并且线...原创 2020-03-17 22:40:13 · 6532 阅读 · 3 评论 -
JAVA多线程与高并发(八)[Executors线程工厂,ForkJoinPoll分叉汇总(MapReduce)]
link-JAVA多线程与高并发系列[前言,大纲,目录]目录Executors线程工厂newSingleThreadExecutor()newCachedThreadPool()newFixedThreadPool()newScheduledThreadPoolnewWorkStealingPool(其实是ForkJoinPool)ForkJoinPoolExecutors线程工厂new...原创 2020-03-17 11:10:33 · 191 阅读 · 0 评论 -
JAVA多线程与高并发(七)[线程池的基本概念,ThreadPoolExecutor的简单使用和源码解读]
link-JAVA多线程与高并发系列[前言,大纲,目录]关键类:Executor <-extends- ExecutorService <-implements-AbstractExecutorService <-extends- ExecutorServiceCallable,FutureExecutor:任务的定义和执行分开,只有一个执行Runnable方法:vo...原创 2020-03-17 11:09:55 · 291 阅读 · 0 评论 -
JAVA多线程与高并发-三道道常见的面试题(基于一到六节)
题目1:线程t1往容器加元素,线程t2监听容器的size题目:实现一个容器,提供两个方法,add,size.写两个线程,线程1添加10个元素到容器中.线程2有一个"监听"容器的效果.当线程1添加的元素个数到5个时,线程2给出提示并结束,然后t1线程继续执行.思路1:线程t1只负责添加元素;线程t2while循环监听,当size==5时终止方法1:volatile和同步List用上vola...原创 2020-03-14 10:10:53 · 560 阅读 · 0 评论 -
JAVA多线程与高并发(六)[常用容器CopyOnWriteList,ConurrentHashMap,各种BlockingQueue,PriorityQueue,TransferQueue]
link-JAVA多线程与高并发系列[前言,大纲,目录]容器是面试的重灾区,因为它涉及到很多方面,比如数据结构,算法,高并发.现在先从使用的角度了解一下,为了学习线程池做准备.具体的容器底层,比如HashMap和SkipList等学习数据结构的时候再记录.从物理存储角度看,只有两种数据结构:1.数组,连续存储2.链表,不连续存储从逻辑上看,有很多种数据结构了…常见容器Collect...原创 2020-03-10 23:08:10 · 290 阅读 · 0 评论 -
JAVA多线程与高并发(五)[ThreadLocal,强软弱虚引用]
link-JAVA多线程与高并发系列[前言,大纲,目录]ThreadLocal假设有一个静态变量,线程使用它的过程中可能会做一些修改,但是这些修改只想在这个线程内部生效,不想影响其他线程,那么就应该用ThreadLocal.举个栗子public class ThreadLocal2 { // 创建一个ThreadLocal变量 static ThreadLocal<Person&...原创 2020-03-10 11:07:34 · 607 阅读 · 0 评论 -
JAVA多线程与高并发(四)[LockSupport,AQS解读]
link-JAVA多线程与高并发系列[前言,大纲,目录]LockSupport关键方法:park(): 当前线程阻塞(如果当前线程没有被unpark)unpark(Thread thread):如果入参的线程正在park(),则让它恢复运行;否则,就保证下一次该线程park()时不会阻塞.unpark(t)必须在线程t启动(start)后才有效果.可以这么理解:unpark相当于是...原创 2020-03-06 17:04:21 · 286 阅读 · 0 评论 -
JAVA-volatile修饰引用类型变量,能否保证其属性的可见性?
先说结论:不能!我看到有些文章会写到,volatile如果修饰引用类型变量,那么"引用"的地址的改变(即变量指向了其他对象)对其他线程是可见的,但是引用的对象的属性变化对其他线程不可见.本着实事求是的精神,我写一些例子,经过一些尝试,发现普通对象的属性的改变,volatile能保证其变化是可见的.但是!!!大量的测试后,我发现,其他线程不是每次都能观察到对象属性的变化,特别是对象的属性变化...原创 2020-03-05 13:38:25 · 3483 阅读 · 11 评论 -
JAVA多线程与高并发(三)[ReentrantLock,ReadWriteLock,CountdownLatch,CyclicBarrier,Phaser,Semaphore,Exchanger]
link-JAVA多线程与高并发系列[前言,大纲,目录]前言这节只讲这些锁的使用,下节讲底层原理(AQS).如果用了很多锁后,担心死锁逻辑,可以用jstack检查ReentrantLock和Synchronized相比,最大的特点就是可以根据业务需求灵活控制.ReentrantReadWriteLock用于一块资源读多写少,又要求避免脏数据的情况Semaphore用于限流,...原创 2020-03-03 20:21:06 · 644 阅读 · 0 评论 -
JAVA多线程与高并发系列[前言,大纲,目录]
学习笔记之多线程与高并发前言时代在不断发展,技术也是日新月异,所以我们就要不断学习进步,才能赶上时代的步伐,尤其是我们程序员.传统普通开发,想跳出舒适圈,向前迈一步的话,需要掌握一些"上天入地"的知识:“上天”:高并发,缓存,大流量,大数据量;“入地”:JVM,OS,算法,线程,IO.本JAVA多线程与高并发系列对一些概念上的论述不是特别准确,多是从于应用上便于理解的一种方式.多线程...原创 2020-03-02 14:11:52 · 417 阅读 · 0 评论 -
JAVA多线程与高并发(二)[volatile,CAS(无锁优化,自旋锁,乐观锁-AtomicLong,LongAdder-分段锁)]
volatile1. 保证线程可见性设一个变量a,如果没有加volatile,多线程情况下,在线程t1修改了a的值后,另一个线程t2读到的仍然是旧值;如果加了volatile修饰,t2就可以马上读到t1修改后的值.因为如下:(本质依靠的是MESI,CPU的缓存一致性协议)变量a在heap堆内存中,堆内存由各线程共享;每个线程都有自己的专属工作内存.当两个线程1和2去访问共享内存的同一个变量...原创 2020-03-02 14:10:47 · 487 阅读 · 0 评论 -
JAVA多线程与高并发(一)[线程概念,同步synchronize关键字]
学习笔记之多线程与高并发前言时代在不断发展,所以我们就要不断学习进步,才能赶上时代的步伐,尤其是我们程序员.传统普通开发,想跳出舒适圈,向前迈一步的话,需要掌握一些"上天入地"的知识:“上天”:高并发,缓存,大流量,阿数据量;“入地”:JVM,OS,算法,线程,IO多线程与高并发系列的大纲:线程程序,进程,线程,协成/纤程(fiber)举个例子:程序:QQ.exe是一个程序,...原创 2020-02-28 15:29:15 · 405 阅读 · 0 评论