java-线程
一.线程:一个进程有多个线程,线程之间资源共享,线程是系统运行能够调度的最小单位。
二.线程中的并行:指两个或者多个事件在同一时刻发生;并行:指两个或多个事件在同一时间间隔发生
三.线程的生命周期:
1.新建态:使用new 创建一个线程对象,仅在堆中分配内存空间,在调用starts方法之前。线程没有启动,仅仅是一个线程对象而已。
Thread thread = new Thread();
线程对象调用starts进入可运行态。
2.可运行态:运行态:线程对象获得jvm调度,如果存在多个cpu,那么允许多个线程并行执行。
就绪态:线程对象调用starts方法后,等待jvm调度,此时线程并没有运行
thread.starts();
3.阻塞态:正在运行的线程因为某些原因放弃cpu,暂时停止运行,就会进入阻塞态。此时JVM不会给线程分配cpu,直到线程重新进入就绪态,才有机会转到运行态;
阻塞态只能先进入就绪态,不能直接转为运行态。
阻塞态情况:1.当A线程处于运行过程中时,试图获取同步锁,但锁却被B线程获取,此时jvm把线程A存入到对象的锁池中,A线程进入阻塞态。
2.当线程在运行时发出IO请求,此时进入阻塞态;
4.等待态:线程对象调用无参的wait()方法(等待状态只能被其他线程唤醒)
当线程处于运行中时调用wait()方法,jvm就把当前线程存入到对象锁池中
5.计时等待态:线程对象调用了带参数的wait(long time),sleep(long time)方法。
1. 当线程处于运行中时调用wait(long time)方法,jvm就把当前线程存入到对象锁池中
2.调用了sleep(long time);
wait和sleep的区别:1.wait是对象方法,sleep是线程方法
2.线程对象调用wait方法,会放弃对象锁;sleep不会
3.线程对象调用wait()方法后必须调用notify和notifyAll唤醒,且必须位于同步代码块中或同步方法中
6.终止态:也称为死亡状态,表示线程终止。
1.正常执行run方法而退出
2.遇到异常
线程一旦死亡,不能调用start方法,否则会报异常。