java 并发编程
分工、同步、互斥
1 首先为什么会有并发编程
是因为性能
1 并发编程处理的是什么,是任务。
需要对任务进行抽象,拆解,分工执行。
线程模型就是其中的一种模型,java 使用
的就是多线程模型,对应到具体代码我们就是
Thread,Runnable,
Executors
为了更好的提高性能,我们是不是可以采用
池化技术。所以就进一步引出线程池
你怎么设计,核心参数,最大参数,休眠时间,拒绝策略
再引申出数据库、Redis 的池子的设计
2 当某个条件不满足时,线程需要等待,当某个条件满足时,线程需要
被唤醒执行。这就引申出一些工具类,比如说常用的工具类 CountDownLatch,Semaphore,
CyclicBarrier。
3 互斥
既然是多个线程,那肯定有抢资源的问题。如何解决抢资源的问题,那就是加锁。
java 里有哪些锁,synchronized,reentrantlock。那我们有了锁解决竞争问题,
但我们还要提高我们的性能,就有什么读锁、写锁、读写锁。
为了进一步追求性能,大师们又在思考怎么解决,如何不加锁,又不让他出错,
又有了 cas,copy-on-write 等思想。,这就实现了无锁并发。
大师们又在思考,能不能继续抽象出一个模型,于是就有了 JMM 内存模型这个东西
评论