1. Java 采用的是单线程编程模型
  2. JVM 进程不是单线程的(创建后启动一个任务线程,同时含其他线程,如垃圾回收线程)
  3. 耗时操作尽量放入子线程
  4. 创建线程:继承 Thread;实现 Runnable;实现 callable
  5. 创建进程:ProcessBuilder 的 start 方法;Runtime 的 exec 方法
  6. 同步,顺序执行(串行),需等待;异步,并行
  7. 阻塞,条件不满足,等待;非阻塞,条件不满足,但返回信息通知你不必等待(跳过)
  8. 阻塞 IO 与非阻塞 IO 类似于 7
  9. 五种 IO 模型:阻塞 IO 模型;非阻塞 IO 模型;多路复用 IO 模型(常用的 Java NIO);信号驱动 IO 模型;异步 IO 模型。前四种为同步 IO,最后一种为异步 IO
  10. 多线程不如线程池,线程池处理长连接不划算
  11. 高性能 IO 设计模式:Reactor 模式;Proactor 模式
  12. NIO 中几个关键概念:Channel 通道(双向,即可读可写),Buffer 缓冲区(容器,是个连续数组),Selector 选择器(检测通道事件)
  13. 线程生命周期:创建 (new)、就绪 (runnable)、运行 (running)、阻塞 (blocked)、time waiting、waiting、消亡(dead)
  14. 上下文切换:单核 CPU 当运行一个线程过程中转去运行另一个线程
  15. Thread 类中的方法
    start ():启动线程,分配必要资源;
    run ():定义具体要执行的任务;
    sleep ():线程睡眠,交出 CPU,但不释放锁;
    yield ():交出 CPU 但不释放锁,不能控制交出的时间,并且只能让相同优先级的线程获取到其 CPU
    join ():让线程释放对一个对象持有的锁,并交出 CPU 执行权限;
    interrupt ():中断一个正处于阻塞状态的线程,或停止一个正在运行的线程;
    stop ():废弃的方法,不安全,基本不用,终止调用 run 方法,强制释放锁;
    destory ():同上;
  16. Thread 线程属性
    getId ():获取线程 ID
    getName () 和 setName ():得到 / 设置线程名称
    getPriority () 和 setPriority ():获取 / 设置优先级
    isDaemon () 和 setDaemon ():判断是否是守护线程 / 设置守护线程
    (JVM 中的垃圾回收器就是一个守护线程)
  17. 线程安全问题:多线程访问或操作临界资源(对象,属性或某个数据库操作等)时遇到的不可预期的异常
  18. 线程安全解决:序列化访问临界资源(同步互斥访问),即临界资源上锁:synchronized 或 lock
  19. synchronized 缺陷:代码块内线程阻塞 (如 sleep) 而又没有释放锁,其他线程会一直等待
  20. Lock 优点:不会造成 synchronized 的无限等待,同时可以知道线程有没有成功获得锁(synchronized 都无法做到),Lock 必须手动释放锁,synchronized 可自动释放
    Appendix:http://www.cnblogs.com/dolphin0520/p/3923167.html
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jalen Chu 微信支付

微信支付

Jalen Chu 支付宝

支付宝

Jalen Chu 公众号

公众号