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

  做为业务开发人员,可以在工做中用到的技术其实很少。虽然平时总是说什么,多线程,并发,注入,攻击!可是在实际工做中,这些东西不见得用得上。由于,咱们用的框架已经把这些事作掉了。java

  好比web开发,外面有大量的请求进来,按理说,咱们应该考虑并发问题。但其实,spring接到请求,分配到controller以后,就已是线程安全的了,因此咱们要作的就是,从controller开始,到最后请求响应结束,保证线程安全便可。web

  多线程好像有不少东西须要注意,阅读《Java 多线程编程核心技术》后,作个总结,整体来讲,其实也没那么多事,没那么复杂。spring

1. 多线程基础编程

  java的多线程,就体如今Thread类与Runable接口!共享数据,才存在线程安全问题,不共享数据不存在线程安全。java的不少中止线程的方法已经废除,不建议使用如: resume,stop,suspend方法。设置线程优先级(setPriority)可能提升线程执行的速度。守护线程的存在须要至少一个非守护线程在运行,也就是说守护线程不能独立存在,其能力是比较低的,好比GC就是守护线程,当你的代码在执行时,GC就在运行,随时进行内存回收,当你的程序执行完成后,GC线程就不存在了。安全

2. 对象及变量的并发访问多线程

  synchronized同步方法,锁对象,锁代码块,锁方法,锁变量,并发

  valatile关键字,使用volatile线程解决同步死循环不中止问题。volatile强制从公共堆中得到变量的值,使保持一致性。框架

 3. 线程间通讯spa

  wait/notify 是最基本的实现线程间通讯的方式。很方便的实现了,消费者/生产者模式。线程

  wait方法后,当即释放锁,notify锁不释放。即wait方法执行后,后续并发请求便可进入该块,而notify则须要等到synchronized代码块执行完成后,才会释放锁。

  notifyAll()唤醒全部等待线程。

  join()方法释放锁等待线程执行完成。Thread.sleep()不释放锁等待。

  经过管道进行通讯,以字符流形式传递。PipeWriter,PipeReader,outputSream.connect(inputStream)将输入流与输出联系在 一块儿。

  ThreadLocal,可认为是一个线程级的全局变量,即在本线程中,随处均可以取到该值,而没必要担忧线程安全问题。set(),get()方法进行设置与取用。

4. Lock的使用

  ReentrantLock,

5. 定时器timer

  timer.schedule(task, dateRef) 执行一次, timer.schedule(task, dateRef, period) 周期性执行。
6. 单例模式与多线程

  if(obj == null) {
    synchronized(MyObject.class) {
      if(obj == null) {
        obj = new MyObject();
      }
    }
  }

  额,这么看来,多线程的知识仍是好少呢。东西不要太多,够精就行!

      不用惧怕多线程,不用惧怕并发!

相关文章
相关标签/搜索