JavaEE-线程的状态

      操作系统里的线程,自身是有一个状态的但是 Java 中,Thread 是对系统线程的封装,把这里的状态又进一步的精细化了!!一起来看看吧,看看你都了解多少~~

      线程的状态主要分为以下6种:1)NEW   2)RUNNABLE  3)TIMED_WATING  4)WATING  5)BLOCKED    6)TERMINATED

     下面来做具体讲解:

1)NEW

当用Thread类实例化一个对象的时候:

Thread t1 = new Thread(()->{});

此时仅仅是有了线程实例对象,但还并没有调用start()真正在操作系统里开启一个线程,所以是NEW状态.

2)RUNNABLE

即就绪态.何为就绪态?分2种:1.该线程正在被cpu核心执行

                                              2.该线程处于等待被cpu调度的状态,但已经做好了随时可以执行的准备.

3)TIMED_WATING

是线程的阻塞态.

此状态特指:调用sleep()方法时,该线程所处的状态.

如果该线程正处于睡眠状态,也就是正在执行sleep ()那么该线程的状态就是TIMED WATING.

public class Threaddemo1 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            while(true){
                try {
                    Thread.sleep(1000);   //sleep的时间几乎占据了t1的整个线程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        t1.start();
        Thread.sleep(1000);  //保证 t1线程已经开始执行
        System.out.println(t1.getState());
    }
}

 结果:

4)WATING

是线程的阻塞态.
此处针对join()和wait()而言:

1)wait:比如t1调用wait 0后就陷入了WATING.一直得到其他线程针对同一把锁调用notify 0 才能将其唤醒为RUNNABLE.

2)join():使用join时也会出现WATING,比如t1等待t2,那么此时t1就是WATING状态.

5)BLOCKED

是线程阻塞态.

此处特指:等待锁的状态.(synchronized).

比如t1和t2竞争同一把锁,t1先拿到锁,此时t2就处于等待锁的状态.

public class Method  {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            synchronized (Method.class){
                while(true){

                }
            }
        });
        Thread t2 = new Thread(()->{
            synchronized (Method.class){
                System.out.println(1);
            }
        });
        t1.start();
        Thread.sleep(1000);  //保证t1先拿到锁
        t2.start();
        Thread.sleep(1000);  //保证t2进入了等待锁的状态

        System.out.println("t2:"+t2.getState());

    }
}

结果:

6)TEMINATED

此状态表示:当前线程已经被执行完了.

此时用 "该线程所对应的Thread类实例 "调用 "获取线程状态方法getState()",就会得到TERMINATED状态.

 

这里给一个大概的图示:

JavaEE-线程的状态_第1张图片

 

以上就是本节所有内容,uu们加油呀!!!

JavaEE-线程的状态_第2张图片

 

 

你可能感兴趣的:(java,jvm,开发语言)