当前位置: 首页 > news >正文

线程的状态

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

转载于:https://www.cnblogs.com/wangshen31/p/6835373.html

相关文章:

  • jquery 实现考试倒计时
  • Android知识点textview加横线的属性
  • 配置链路聚合(端口聚合)
  • ELK常用API使用方法
  • oracle表空间增长异常或表空间占用过高问题分析
  • 大前端推荐使用的前端开发工具
  • 5.求单链表中节点的个数
  • 第九天
  • fmod()函数和modf()函数
  • 读书笔记--Java核心技术--基础篇
  • velt-0.1.7开发: KernelConfig的问题
  • P1164 小A点菜
  • 新建虚拟机
  • OpenCV探索之路(五):图片缩放和图像金字塔
  • 99%的人都理解错了HTTP中GET与POST的区别
  • SegmentFault for Android 3.0 发布
  • 2019.2.20 c++ 知识梳理
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • express如何解决request entity too large问题
  • Facebook AccountKit 接入的坑点
  • golang 发送GET和POST示例
  • Java IO学习笔记一
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript异步流程控制的前世今生
  • JS变量作用域
  • Laravel5.4 Queues队列学习
  • Mysql数据库的条件查询语句
  • SQL 难点解决:记录的引用
  • v-if和v-for连用出现的问题
  • Zepto.js源码学习之二
  • 工作手记之html2canvas使用概述
  • 构建工具 - 收藏集 - 掘金
  • 计算机常识 - 收藏集 - 掘金
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端性能优化--懒加载和预加载
  • 微信小程序--------语音识别(前端自己也能玩)
  • 为什么要用IPython/Jupyter?
  • ionic异常记录
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (C++17) std算法之执行策略 execution
  • (C语言)共用体union的用法举例
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (七)c52学习之旅-中断
  • (十一)手动添加用户和文件的特殊权限
  • (四)Linux Shell编程——输入输出重定向
  • (一)基于IDEA的JAVA基础10
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)原始图像数据和PDF中的图像数据
  • (转载)虚函数剖析