Java多线程编程核心技术(二)
先sleep在interrupt()停止,和,先interrupt()停止再sleep。
如果在sleep状态下停止某一线程,会进入catch语句,并且清除停止状态值,使之变成false。
使用stop暴力停止线程。
调用stop()方法时会抛出java.lang.ThreadDeate异常,此异常不需要显示的去捕捉。
方法stop()已经作废,因为如果强制停止线程有可能使一些清理性的工作得不到完成。
另外一个情况就是对锁定的对象进行了解锁,导致数据得不到同步的处理,出现数据不一致的情况。
使用return停止线程,将方法interrupt与return结合能够停止线程。
暂停线程:suspend,resume方法。
suspend,resume方法的缺点——独占,不同步。
在使用suspend,resume方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问到公共同步对象。
yield方法:放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间,但是放弃的时间不确定,有可能刚刚放弃,
马上又获得CPU时间片。
线程的优先级:
设置线程 的优先级:setPriority()方法。
优先级较高的线程会获得更多的CPU资源,也就是CPU优先执行优先级较高的线程对象中的任务。
设置线程的优先级有助于帮“线程规划器”确定在下一次选中哪一个线程来优先执行。
线程的优先级分为1-10等级,如果小于1或大于10,JDK会抛出异常throw new IllegalArgumentException().
线程优先级的继承特性:
比如A启动B线程,则B线程的优先级和A线程是一样的。
优先级具有规则性:高优先级的线程总是先大部分执行完,当不代表高优先级的线程全部先执行完。
当线程的优先级的等级差距很大时,谁先执行完和代码的调用顺序无关。
优先级具有随机性:优先级较高的线程不一定每一次都先执行完。
守护线程:
在Java线程中有两块线程,一种是用户线程,另一种是守护线程。
守护线程有陪伴,守护的含义,当线程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,
当进程中没有非线程了,则垃圾回收线程也就没有存在的意义了,自动销毁。
任何一个守护线程都是整个JVM中所有非守护线程的保姆,只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作,
只有当最后一个非守护线程结束时,守护线程菜随着JVM一同结束工作。
通过Thread.setDaemon(true)设置为守护线程。如果不设置次属性,默认为用户线程。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Docker配置1台Nginx+3台Tomcat做负载均衡
- Centos7.x+Docker部署RabbitMQ
- LeetCode(1)-找出数组中重复的数字
- LeetCode(面试题:二维数组中的查找)
- 面试题05-替换空格(LeeCode)
- 解决Mybatis当实体类中的属性名和表中的字段名不一致的问题
- 图书管理系统(一)项目框架结构搭建
- Mybatis中模糊查询like语句的使用方法
- win10暴力查看wifi密码
- 再也不怕面试官问java中的goto关键字了?
- 死磕Java之分析short类型
- 死磕Java之Java数据类型的来龙去脉
- 请不要再使用判断进行参数校验了
- 检测假新闻:比较不同的分类方法的准确率
- SpringBoot下载xlsx模板,导出excel数据