并发 (线程的可视化)
21.1并发的多面性:“速度”“设计的可管理性”
21.1.1更快的执行:阻塞、 事件驱动的编程、函数型语言、线程机制
21.1.2改进代码的设计:
21.2 基本的线程机制:
21.2.1定义任务: Runnable接口、Run()方法、Thread.yield()、线程调度器、main()线程
21.2.2Thread类: Thread构造器、Thread对象的start()方法、
练习
21.2.3使用Executor:java.util.concurrent包以及包中的执行器、ExecutorService 具有服务生命周期的Executor、
Executor方法有静态动态之分么:、shutdown()方法、FixedThreadPool、CashedThreadPool、
SingleThreadExecutor
21.2.4从任务中产生的返回值:
Callable接口、call()方法、ExecutorService.submit()方法、Future对象、isDone()方法、get()方法
21.2.5休眠: sleep()方法、InterruptedException异常、TimeUnit类、睡眠(阻塞)
练习
21.2.6优先级: 线程的优先级、死锁、getPriority()、setPriority()方法、Thread.toString()方法、
Thread.currentThread()方法、关键字volatile、MAX_PRIORITY、NORM_PRIORITY、MIN_PRIORITY
21.2.7让步: yield()、与sleep()区别
21.2.8后台线程: main()线程性质、后台线程(daemon)、setDaemon()方法、isDaemon()方法、子线程、
练习
21.2.9编码的变体: getName()方法
21.2.10术语:
21.2.11加入一个线程: join()方法、join()方法的中断:interrupt()方法 、 isInterrupt()方法
21.2.12创建有响应的用户界面:
怎样才算是有响应的用户界面
21.2.14捕获异常: try-catch语句块、Thread.UncaughtExceptionHandler接口、
Thread.UncaughExceptionHandler.uncaughtException()方法
21.3共享受资源:
21.3.1不正确的访问资源:
21.3.2解决共享资源竞争:互斥量(mutex)、序列化访问共享资源、上锁、解锁、关键字synchronized、监视器、同步规则、
使用显式的Lock对象、 java.util.concurrent.locks、try—finally 单词翻译capture
21.3.3原子性与易变性: 原子操作、long和double、线程任务的可视化指什么、修改
21.3.4原子类: AtomicInteger、AtomicLong、AtomicReference原子性变量类、
boolean compareAndSet(expectedValue,updateValue)方法提供原子性条件的更新操作
21.3.5临界区: 临界区(critical session)、同步控制块、模块方法、线程安全怎么判别、模板方法
21.3.6在其他对象上同步:
21.3.7线程本地存储: 线程本地存储、java.lang.ThreadLocal类
21.4终结任务: cancel()、iscancel()
21.4.1装饰性花园:
21.4.2在阻塞时终结: 线程状态: 新建、就绪、阻塞、死亡、
进入阻塞状态::
21.4.3中断: Thread类中的interrupt()方法、Executor的shutdownNow()方法、中断的类型
练习
被互斥所阻塞
21.4.4检查中断: interruptException异常、Thread.interrupted()方法
21.5线程之间的协作: 任务之间的握手、Condition对象的await()/signal()方法 、Object的wait()/notify()方法
21.5.1wait()与notifyALl():
练习
21.5.6错失的信号: <Setup condition for T2>
21.5.3生成者与消费者: 使用显式的Lock和Condition对象
21.5.4生产者—消费者与队列:java.util.concurrent.BlockongQueue接口、无届队列LinkedBlockingQueue、ArrayBlockingQueue
练习
吐司BlockingQueue
练习
21.5.5任务间使用管道进行输入/输出
PipedWriterlei/PipedReader类
21.6死锁: 死锁发生的条件:
21.7新类库中的构件: java.util.concurrent
21.7.1CountDownLatch: CountDownLatch对象、countDown()方法、CyclicBarrier、
类库的线程安全 TaskPortion/TaskPortion包含的Random对象、Random.nextInt()是线程安全的其它的
21.7.2CyclicBarrier: 适用于你希望创建一组任务,他们并行的执行工作,然后再进行下一个步骤之前等待,直至所有任务都完成、它使得
所有的并行任务都在栅栏处列队,因此可以一致的向前移动;和join() 方法的区别、和CountDownLatch的区别
栅栏动作
21.7.3 DelayQueue 这是一个无界的BolckingQueue,用于放置Delayed接口对象,Delayed接口、Poll()方法
21.7.4PriorityBlockingQueue:很基础的优先级队列,具有可阻塞的读取操作
21.7.5使用ScheduledExecutor的温度控制器:
ScheduledExecutor、scheduledThreadPoolExector、schedule()方法、scheduleFixedRate()方法、
21.7.6 Semaphore 对象池、正常的锁有哪两种:concurrent.locks/synchronized 、计数信号量
21.7.7Exchanger
21.8仿真
21.8.1银行出纳员仿真
21.8.2饭店仿真
21.8.3分发工作
21.9性能调优:
21.9.1 比较各种互斥技术: synchronized/Lock/Atomic、 模板方式设计模式 翻译Accumulate
21.9.2 免锁容器 CopyOnWriteArrayList CopyOnWriteArraySet、ConcurrenHashMap、ConcurrentLinkedQueue
乐观锁 containerInitializer()/ duration翻译
比较各种Map实现:synchronizedHashMap/ConcurrentHashMap
21.9.3乐观加锁
21.9.4ReadWriteLock
21.10活动对象: 不连接对象、 活动对象: