Java进程笔记

Java进程笔记

进程就是程序的一个执行流

  • Java线程模型:虚拟CPU,代码,数据
  • 线程创建:继承Thread或实现Runnable方法
  • 线程调度策略:Java是基于优先级的抢先式调度,同级可能是分时的,取决于JVM[如何查询?]

线程基本控制:

  • sleep[释放cpu,但不释放对象锁],进Otherwise block池
  • wait[释放cpu,并释放对象锁],wait是对象的方法
  • notify/notifyAll
  • yield
  • join[t.join()],其它线程进入Otherwise block池
  • interrupt,清除由sleep,join,wait导致的阻塞
  • currentThread
  • isAlive
  • stop
  • suspend,resume

线程同步

  • 临界资源:既共享的资源,多个线程需要通过互斥的方式访问,否则会导致同步问题。

  • 临界区:进程中访问临界资源的代码,它可以是一个方法,或一个代码块,用synchronized修饰 对象锁的说明

  • 锁的释放
    synchronized执行完毕
    synchronized执行中出现异常
    有锁线程调用对象的wait方法->wait pool

  • 所有临界数据都应通过临界区访问

  • 临界数据必须是私有的

  • synchronized可以修饰方法或代码块

  • 对象锁具有可重入性,即如果某线程已经获得某对象的锁,它可以再次申请并获得该对象的锁

死锁

  • java无检测避免死锁的机制,需自行防控。一般做法是对临界资源访问有全局考虑,定义一个获得锁的顺序,并在整个程序中都遵守
  • 释放锁按加锁反序释放

wait/notify/notifyAll

  • 通过wait/notify实现线程之间的交互,线程满足某特定条件才能执行,如条件不满足,调用wait,释放临界资源和CPU,调用线程进入wait
    pool, 由协作线程修改条件,然后notify对应线程

  • 经典的例子是producer/customer

线程状态和生命周期
Java进程笔记_第1张图片

你可能感兴趣的:(Java)