1. 高并发

1.1. 进程-线程-协程 区别

  • Process(进程): 一个 Tomcat 实例是一个进程。一个 JVM 对应一个进程
  • Thread(线程): Tomcat BIO 模式的每个请求是一个线程。每个请求可以创建多个线程同时处理多个业务
  • Coroutine(协程): Fiber 或者 GreenThread

1.1.1. 任务

  • Runnable: 无返回的任务
  • Callable: 有返回的任务
  • Future: 保存异步处理结果

FutureTask

构造方法一:public FutureTask(Runnable runnable, V result)

Future.get() 得到 FutureTask 构建方法里的 result

构造方法二:public FutureTask(Callable<V> callable)

Future.get() 得到 Callable 的返回值

1.2. 线程

  • 中断线程
  • 守护线程

1.3. 守护线程

t.setDaemon(true)

守护线程的唯一作用就是为其他线程提供服务。java虚拟机退出时Daemon线程中的finally代码块并不一定会执行

1.4. 线程同步

1.4.1. synchronized

1.4.2. Lock

  • Lock
  • ReentrantLock 重入锁

1.5. 线程间通信

1.5.1. synchronied 关键字等待/通知机制

1.5.2. 条件对象的等待/通知机制

1.6. Java 并发编程

  • java.util.concurrent
  • Executor 框架

1.7. 异步转同步

  • 使用wait和notify方法
  • 使用条件锁
  • Future
  • CountDownLatch: 需要知道有多少个任务
  • CyclicBarrier: 需要知道有多少个任务
  • Phaser: 可动态 register

1.8. Future

1.8.1. CompletableFuture

Java8 CompletableFuture: 相当于 OC 的 dispatch_queue,JS 的 Promise

1.9. ForJoinPool

1.10. 同步器

1.11. 生产者消费者

1.11.1. Disruptor

使用 CAS 实现无锁设计

1.11.2. References

1.12. ThreadLocal

1.12.1. 使用场景

  • 实现单个线程单例以及单个线程上下文信息存储,比如交易id等
  • 实现线程安全,非线程安全的对象使用ThreadLocal之后就会变得线程安全,因为每个线程都会有一个对应的实例
  • 承载一些线程相关的数据,避免在方法中来回传递参数

1.13. 书籍

  • 《Java并发编程的艺术》
  • 《实战Java高并发程序设计》
  • 《Java性能权威指南》

1.13.1. 书籍下载

1.14. References

results matching ""

    No results matching ""