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方法,否则会报异常。

原文地址:https://www.cnblogs.com/SoftwareBuilding/p/11453289.html