
网络、线程与IO
JokerDa
写完代码多检查两遍!
展开
-
(笔记整合)Java并发编程一
其实并发编程可以总结为三个核心问题:分工、同步、互斥 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。Java SDK 并发包很大部分内容都是按照这三个维度组织的,例如 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典型的同步方式,而可重入锁则是一种互斥手段。 如何才能学好并发编程? 并发...原创 2019-06-25 14:16:19 · 645 阅读 · 0 评论 -
(笔记整合)Java并发编程二
Lock和Condition 再造管程的理由: 能够响应中断。synchronized 的问题是,持有锁 A 后,如果尝试获取锁 B 失败,那么线程就进入阻塞状态,一旦发生死锁,就没有任何机会来唤醒阻塞的线程。但如果阻塞状态的线程能够响应中断信号,也就是说当我们给阻塞的线程发送中断信号的时候,能够唤醒它,那它就有机会释放曾经持有的锁 A。这样就破坏了不可抢占条件了。 支持超时。如果线程在一段时间...原创 2019-06-28 19:07:52 · 283 阅读 · 0 评论 -
(笔记整合)Java并发编程三
Immutability模式 解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。 快速实现具备不可变性的类 实现一个具...原创 2019-07-10 20:27:05 · 346 阅读 · 0 评论