• 线程的状态


    注意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是直接就结束,所以一般不用。

  • 相关阅读:
    Elastic Stack之FileBeat使用实战
    Elastic Stack之Logstash进阶
    Elastic Stack之Logstash
    Elastic Stack之Elasticsearch 5.6.12 集群部署实战
    CentOS安装操作系统级初始优化
    Elastic Stack之搜索引擎基础
    ansible基础-ansible角色的使用
    ansible基础-playbook剧本的使用
    ansible基础-ansible的安装和常用模块介绍
    运维开发笔记整理-使用序列化
  • 原文地址:https://www.cnblogs.com/wangshen31/p/6835373.html
Copyright © 2020-2023  润新知