进程:现代的操作系统都是多任务操作系统,一个任务就是一个进程,进程是程序的运行状态,在单核CPU的情况下,OS会通过切分CPU时间片的形式来保证多任务的执行(实际上还是串行,只不过每个任务分配的时间极少,轮换执行,导致在人们感觉上好像是同时执行的),多核的情况下,任务就真的是并行执行了
线程:程序最小的运行单位,同一个进程下的多个线程会共享进程内存空间,同时也会有自己独立的内存空间,线程的切换开销要小于进程,因为进程是整体程序的切换,而线程只是进程内部的切换
线程运行状态:启动,准备就绪,运行,阻塞,死亡状态,调用start方法进入启动状态,启动后获得各种资源分配进入就绪状态,获得CPU执行时间进入运行状态,sleep或者yield,wait进入阻塞状态,运行结束进入死亡状态
线程资源共享:可通过声明static变量或线程成员变量进行线程资源共享,static变量属于类所有,为多个实例所共有,在程序运行期间,内存里就一份,多个线程操作该变量时会共享,实现runnable接口,声明成员变量,启动多个线程也会共有这些成员变量,因为多个Thread跑的就是同一个实例
线程之间的协作主要是通过sleep方法(让渡CPU,不释放锁,阻塞调用者线程),yield方法(让渡CPU,不释放锁,阻塞调用者线程),wait方法(让渡CPU,释放锁,阻塞调用者线程),notify/notifyAll唤醒被阻塞线程(wait挂起的线程)
死锁:多个线程互相持有对方想要的锁,解决方法:排列资源的优先级,就是在竞争同一把锁的时候,加锁的顺序保持一致
