《Java多线程编程核心技术》读书笔记

《Java多线程编程核心技术》读书笔记。

###第一章 Java多线程技能编程

  1. 使用Java多线程两种方式。
    继承Thread类与实现Runnable接口。多线程

  2. 线程的开始、停止、暂停、恢复、中止。
    start()interrupt()suspend()resume()stop()并发

  3. 线程的idname、优先级priority、守护daemon
    线程的id由内部自增字段维护,默认的name也是如此。优先级priority没有强迫性。deamon表示本线程是否守护主线程。this

  4. 线程的sleepyieldwait区别。
    sleep不释放锁,不放弃当前CPU资源。yield不释放锁,放弃CPU资源。wait是释放锁,并放弃CPU资源。线程

  5. 线程跳出执行的方法。
    可以使用“异常法”,在同步代码中根据线程是否interrupted,抛出异常,这样中断的消息能够有调用栈中传递。调试

###第二章 对象及变量的并发访问code

  1. synchronized同步方法与同步代码块。
    同步方法与同步代码块相似,锁定的是this对象。对象

  2. 锁同步对象为实例与类的区别。
    实例对象锁定的是实例对象,类锁定的是类对象。继承

  3. String为锁的特性。
    String对象有常量池,全部锁定同一个字面量的String对象,是同一个对象锁。接口

  4. synchronizedvolatile
    volatile主要做用是使变量在多线程间可见。而synchronized是保证多线程的同步性,同时有也有可见性。

  5. volatile的非原子性。
    volatile不具有同步性,也不具有原子性。

  6. Atomic相关类。
    相关类保证了原子性,可是没有同步性,类的每一个方法之间调用不是原子性的。

  7. 同步方法的非继承、异常自释放,脏读。
    同步方法不会继承同步性,出现异常会自动释放锁,在多线程状况下,可能会读到已经被修改的值。

###第三章 线程间通讯

  1. Object中等待与通知的锁模型。
    调用wait()方法,当前线程释放锁,会在wait()代码中止执行,直到中断或接到通知。调用notify()方法会在线程退出同步体后释放锁,并通知其余在等待对象锁的线程。

  2. 生产者与消费者模式。

  3. 管道进行线程通讯。
    经过字节流与字符流也可用于不一样线程以前的通讯。

  4. Threadjoin方法实现机制。
    使用join() 可让主线程等待子线程执行完成以前再结束。内部实现机制是让主线程的进入子线程的join()方法,而后等待。由于join()是同步方法,没人通知,因此会无限期阻塞,直到子线程销毁。

  5. ThreadLocal线程隔离的实现机制。
    ThreadLocal可让线程持有线程独有的变量,内部原理是Thread类中有一个Map,存储着全部ThreadLocal变量,以ThreadLocal字段实例为Key。全部不一样的线程会有不一样的ThreadLocal变量值。

第四章 Lock的使用

  1. ReentrantLocksynchronized的对比。
    lock()unlock()方法对对应synchoronized的同步区。

  2. ConditionObject中的锁模型对比。
    await()对应wait()signal()/signalAll()对应notify()/notifyAll()

  3. 公平锁与非公平锁。
    公平锁表示获取锁是按加锁的顺序分配的,也就是FIFO,非公平锁就是按随机获取。

  4. tryLock()awaitUntil()等独有方法。
    tryLock()做用是只有在没其余线程持锁的状况才去获取锁。awaitUntil()是指等待到某个时间点。

  5. ReentrantReadWriteLock的读写排斥规则。
    读写锁的规则是读读共享,写写互斥,读写互斥,写读互斥。

第五章 定时器 Timmer

  1. 定时器过时调度规则。
    当计划时间早于当前时间时,定时器会马上执行,若是晚于当前时间,会等待到计划时间再执行。

  2. scheduleAtFixedRate()的间隔时间规则与过时补偿调度。
    scheduleAtFixedRate()schedule()方法不一样,一是在计算下次执行时间,后者是本次任务的开始时间+时间间隔得出,前者是使用严格按初始时间+时间间隔得出,因此当前时间比计划时间要晚的时间,调试器会“补上”从初始时间到当前时间没有执行的任务。

第六章 单例模式与多线程

  1. 六种单例模式。
    有经典饿汉模式、静态代码块模式、静态内部类模式、枚举模式、经典懒汉模式、DCL同步代码模式。

  2. 懒汉模式与可能出现的同步问题及解决方法。
    懒汉模式就是延迟加载,但在多线程情景下,可能会出现多个实例。可使用synchronized同步方法,或者用双重检查锁机制解决这个问题。

第七章 拾遗增补

  1. 线程六种状态,和状态之间的转换。
    线程有NEWRUNNABLEBOLOCKEDWAITINGTIMED_WAITINGTERMINATED六种状态。

  2. 线程组相关知识:自动归属、多级关联、中止等。
    当线程建立时,若是没有指定所属线程组,他会自动归属到当前线程所在的线程组。线程组以前能够多级关联造成线程树。

  3. 线程与线程组异常处理。
    线程与线程组可以使用UncaughtExceptionHandleruncaughtException处理相关的异常,没必要在run()中处理。若是run()中有try-catchuncaughtException就不会被调用。

相关文章
相关标签/搜索