zoukankan      html  css  js  c++  java
  • 线程的状态

    注意start()了不代表你就执行了喔,因为cpu像个厕所,有n多线程在排队呢,凭什么你一start就要执行你。所以start了只是说你开始排队了,你准备好了,属于就绪状态。当然这个过程太快我们是感觉不到的。

    这是几个线程的状态转换,那么怎么控制线程的状态转换呢?

     阻塞也还在活着,终止和new出来没有start都是死的

    每个线程有自己的优先级,优先级越高的线程它获得的cpu的执行时间越多

    notify()唤醒一个调用了当前对象的wait()方法而进入等待状态的线程。

    notifyAll()通知全部进入等待状态的线程,告诉其他线程条件已满足,可以继续执行。唤醒之后的线程才可以获得监视器。

      sleep是thread的静态方法,会抛InterruptedException,就是睡着了被人吵醒的意思

    import java.util.*;
    
    public class TestInterrupt {
        public static void main(String[]  args) {
            MyThread thread = new MyThread();
            thread.start();
            try {
                Thread.sleep(10000);//注意这里是调用类Thread的静态方法sleep,这个方法在哪个线程里调用,哪个线程就sleep
            } catch(InterruptedException e) {
                e.printStackTrace();    
            }
            thread.interrupt();  //相当于打断MyThread线程    
        }
    }
    
    class MyThread extends Thread {
        public void run() {
            while(true) {
                System.out.println("==="+new Date()+"===");
                try {
                    sleep(1000);
                } catch (InterruptedException e) {  //这个异常不能throws,因为这个方法是重写的,重写的方法不能throws与被重写的方法不同的异常。
                    return;     //相当于一旦线程被打断,被泼了凉水,这个run就结束,相当于线程结束
                }
            }
        }
    }

    这里的interrupt是一个结束线程的方法,但它不是个好的方法,因为你想人家睡觉你给人家泼冷水这样好吗。

    其实thread类还有个结束线程的方法,stop(),但这个更不好,是直接杀死线程,你catch到interrupt异常还可以执行点东西,stop是直接就结束,所以一般不用。

  • 相关阅读:
    git上传本地项目
    第十一章 持有对象
    java 闭包与回调
    类名.class 类名.this 详解
    匿名内部类
    第十章 内部类
    Java简单调用Zookeeper服务
    Linux下ZooKeeper集群安装
    Linux自动化安装JDK
    linux下初步实现Keepalived+Nginx高可用
  • 原文地址:https://www.cnblogs.com/wangshen31/p/6835373.html
Copyright © 2011-2022 走看看