• 1. 多线程的一些知识
  • 2. 主要内容线程基础 并行机制的底层实现原理 锁 并发容器和框架 并行工具类 并行程序调试
  • 3. 线程的状态
  • 4. 构造线程在运行线程之前首先要构造一个线程对象,线程对象在构造的时候需要提供线程所需要的属性,如线程所属的线程组、线程优先级、是否是Daemon线程等信息。
  • 5. (本页无文本内容)
  • 6. 线程的基本操作新建:继承Thread类,实现Runnable接口。start 终止:Thread.stop() 中断: public void Thread.interrupt() // 主动中断线程 public boolean Thread.isInterrupted() // 判断是否被中断 public static boolean Thread.interrupted() // 判断是否被中断,并清除当前中断状态
  • 7. 中断举例
  • 8. 线程的基本操作挂起(suspend)和继续执行(resume)线程 等待线程结束(join)和谦让(yeild) 等待(wait)和通知(notify)
  • 9. (本页无文本内容)
  • 10. 守护线程 在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程就可以理解为守护线程 Thread t=new DaemonT(); t.setDaemon(true); t.start();
  • 11. Java如何保证并行机制?变量的共享,实时性? volatile 变量的独享,稳定性? synchronized
  • 12. volatileJava语言规范第3版中对volatile的定义如下: Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, 线程应该确保通过排他锁单独获得这个变量。 Java语言提供了volatile,在某些情况下比锁要更加方便。 如果一个字段被声明成volatile, Java线程内存模型确保所有线程看到这个变量的值是一致的。
  • 13. volatile是如何来保证可见性的呢?
  • 14. Lock前缀的指令在多核处理器下会引发了两件事情1)将当前处理器缓存行的数据写回到系统内存。 2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。
  • 15. synchronized– 指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁。 – 直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁。 – 直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类的锁。
  • 16. 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁到底存在哪里呢?锁里面会存储什么信息呢?
  • 17. Java对象头synchronized用的锁是存在Java对象头里的。如果对象是数组类型,则虚拟机用3个字宽(Word)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。在32位虚拟机中,1字宽等于4字节,即32bit,如表2-2所示。
  • 18. Mark Word里默认存储对象的 HashCode 分代年龄 锁标记位 32位JVM的Mark Word的默认存储结构 运行期间状态如何变化?
  • 19. (本页无文本内容)
  • 20. 锁Lock接口 synchronized
  • 21. Lock接口提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁 Lock lock = new ReentrantLock(); lock.lock(); try { } finally { lock.unlock(); }
  • 22. Lock接口相比synchronized关键字所不具备的主要特性
  • 23. (本页无文本内容)
  • 24. 队列同步器队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。
  • 25. 锁:优化策略偏向锁 轻量级锁 自旋锁 消除锁
  • 26. JDK并发包ReentrantLock Condition Semaphore ReadWriteLock CountDownLatch CyclicBarrier LockSupport ReentrantLock 的实现
  • 27. 并发容器HashMap Collections.synchronizedMap public static Map m=Collections.synchronizedMap(new HashMap()); List synchronizedList Set ConcurrentHashMap BlockingQueue
  • 28. 多线程调试的方法