12.1 进程与线程
4种状态:新建、运行、中断和死亡。 (新建、运行、中断和死亡)
建立线程的两种方法:用Thread类或其子类。
线程新建后,必须调用 start () 方法使其进入就绪队列,才有机会获得 CPU 资源,不调用 start () 方法无法获得 CPU 资源
中断的4种原因:(1)JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。(2)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。(3)线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态。(4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。
死亡状态,不能再调用start()方法。run () 方法执行完意味着线程任务已完成,进入死亡状态,处于死亡状态的线程生命周期结束,无法再启动
isAlive () 方法用于判断线程是否存活,当线程执行完 run () 方法或者因异常终止,即进入死亡状态,此时该方法返回 false
一个线程的 run () 方法通常只执行一次,不能多次启动
12.2 Java中的线程
设置线程的两种方法:用Thread类或其子类。
在 Java 中,使用 setPrority(int grade)方法,默认情况下所有线程优先级是 5 级
多线程:Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱。
当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。
当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。
12.3 Thread类与线程的创建
12.4 线程的常用方法
12.5 线程同步
同步方法同一时刻只能被一个线程访问,其他线程需等待