14 并发
文章平均质量分 92
Whaleson
这个作者很懒,什么都没留下…
展开
-
14.1什么是线程
多进程与多线程的区别 每个进程拥有自己的一套变量,而线程则共享数据。 14.1.1使用多线程给其他任务提供机会 将任务代码移动到实现了Runable接口的类的run方法中: Runable r=()->{}; Runable创建一个Thread对象: Thread t = new Thread(r); 启动线程: t.start(); 14.2 中断线程 当线程的run方法执...原创 2019-08-13 23:17:47 · 150 阅读 · 0 评论 -
14.8Callable与Future
Runnable封装一个异步运行的任务,可以把它想象为一个没有参数和返回值的异步方法。Callable与Runnable类似,但是有返回值。 Future保存异步计算的结果。可以启动一个计算,将Future对象交给某个线程,然后忘掉它。Future对象的所有者在计算好之后可以获得它。 FutureTask包装器是一种非常便利的机制,可将Callable转换成Future和Runnable...原创 2019-08-25 15:37:41 · 151 阅读 · 0 评论 -
14.9执行器
如果程序中创建了大量的生命周期很短的线程,则该使用线程池。一个线程池包含许多组合南北运行的空闲线程。将Runnable对象交给线程池,就会有一个线程调用run方法。当run方法退出时,线程不会死亡,而是在池中准备为下一个请求提供服务。 减少并发线程的数目。创建大量线程会大大降低性能甚至使虚拟机奔溃。...原创 2019-08-25 17:08:46 · 181 阅读 · 0 评论 -
14.5同步
如果两个线程存取相同的对象,并且每个线程都调用了一个修改该对象状态的方法,根据各线程访问数据的次序,可能会产生讹误的对象。这样一个情况通常称为竞争条件。 14.5.3 锁对象 有两种机制防止代码块受并发访问的干扰。 synchronized关键字; ReentrantLock类; ReentrantLock保护代码块的基本结构如下: private Lock myLock = new...原创 2019-08-27 07:41:57 · 181 阅读 · 0 评论 -
14.6阻塞队列
Blocking Queue 使用队列,可以安全地从一个线程向另一个线程传递数据。 阻塞队列方法 方法 正常动作 特殊情况下的动作方法 add 添加一个元素 如果队列满,则抛出IllegalStateException 异常 element 返回队列的头元素 如果队列空,抛出NoSuchElementException异常 offer 添加一个元素并返回true 如果队...原创 2019-09-03 07:45:36 · 194 阅读 · 0 评论 -
14.7 线程安全的集合
java.util.concurrent包提供了映射、有序集和队列的高效实现:ConcurrentHashMap、ConcurrentSkipListMap 、ConcurrentSkipListSet和ConcurrentLinkedQueue。 &n...原创 2019-09-09 07:46:11 · 205 阅读 · 0 评论