多线程(二)

一.关于线程的常用操作

1.启动线程

run(): 对于run方法的覆写只是指定线程要做的任务清单,而不是真正的启动线程

start(): start()方法才是真正的在底层创建出一个线程,并且启动

2.中断线程

1.通过共享的标记来中断

package demo;
import static java.lang.Thread.sleep;
public class MyThread06  {private static class MyRunnable implements Runnable{public static volatile boolean isQuit=false; //设立标志位@Overridepublic void run() {while(!isQuit){System.out.println(Thread.currentThread().getName()+"正在工作");try{sleep(1000); //打印一次休眠1秒} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName()+" 不工作了");}}public static void main(String[] args) throws InterruptedException {Thread t=new Thread(new MyRunnable(),"线程1");t.start();//main主线程创建了另一个线程System.out.println(Thread.currentThread().getName()+"开始工作");Thread.sleep(5*1000);//休眠5秒MyRunnable.isQuit=true;//让标志位改变,让另一个线程停止工作}
}

2.调用intertrupt()方法通知

package demo;
import static java.lang.Thread.sleep;
public class MyThread07 {private static class MyRunnable implements Runnable{@Overridepublic void run() {while(!Thread.interrupted()){System.out.println(Thread.currentThread().getName()+"正在工作");try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();break;//收到打断信号就跳出循环不工作(收到中断信号不跳出循环也可以继续工作)}}System.out.println(Thread.currentThread().getName()+"不工作了");}}public static void main(String[] args) throws InterruptedException {Thread t=new Thread(new MyRunnable(),"线程1");t.start();System.out.println(Thread.currentThread().getName()+"开始工作");Thread.sleep(5*1000);t.interrupt();}
}

3.等待一个线程结束:join()

4.获取当前线程:currentThread()

5.休眠当前线程:sleep()

6.观察一个线程的状态 State()

线程的六大状态:

NEW(new):  新建状态(线程还在刚被new出来的状态)

RUNNABLE(runnable):可运行状态(可运行状态时线程可能正在运行或者处于可被调度的状态)

WAITING(waiting): 等待状态(无限期等待)

TIMEWAITING(time-waiting):超时等待状态(有指定的时间的等待)

BOLCKED(blocked):阻塞状态(线处于阻塞状态)

TERMINATED(terminated):终止状态(线程正常结束运行或者异常结束运行状态)

7.yield()  线程直接让出CPU

二.关于线程安全

1.线程安全:

如果一份多线程的代码是可以运行出我们所预期的结果的,我们就称它在多线程的情况下是符合预期的,是线程安全的。如果结果是不符合预期的,就是线程不安全的。

出现线程安全的原因:

1.多个线程同时修改共享的数据,导致最终的结果不符合预期

2.没有保证原子性,原子性就是一份代码运行的最小单位,如果这个最小单位还没运行结束,其他线程的代码就开始介入,那么就说没有保证原子性,一个线程正在对共享变量操作,还没操作完毕,其他线程就介入,结果就会不符合预期,线程就不安全。

3.没有保证可见性,没有保证可见性就是一个线程对于一个变量的修改,没有及时被其他线程看到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87225.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 898. 数字三角形 (每日一题)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 注意 像数组下标出现i-1的,在循环的时候从i1开始。 关于0x3f3f3f3f和Integer.MAX_VALUE 0x3f3f3f3f:1061109567 Integer.MAX_VALUE:2147483647 在选用Integ…

一个插件实现代码自由,快来试试吧

效果如下 开始操作 1.插件下载并解压 2.打开chrome浏览器,点击扩展程序–》管理扩展程序 3.打开开发者模式,加载已解压的扩展程序 4.加载AI工具 5.打开插件 6.回到主页,效果如下 7.点击ChatGPT 8.大概过30秒,邮箱注册 9.注册完成,可以…

mysql sql_mode数据验证检查

sql_mode 功能 sql_mode 会影响MySQL支持的sql语法以及执行的数据验证检查。通过设置sql_mode ,可以完成不同严格程度的数据校验,有效地保障数据准确性 sql_mode 严格模式 VS 宽松模式 宽松模式 比如,插入的数据不满足 表的数据类型,也可能…

Android ---使用Jenkins 打包release版本不能安装或者安装后不显示APP

大家在用 Jenkins的时候,是不是会觉得很爽,因为他在用的过程中,是无脑的,毕竟一键触发!!!! 这边记录一个昨天,今天遇到的一个坑货问题,别人提交了所有代码&am…

【数据仓库】Linux、CentOS源码安装Superset

Linux、CentOS源码安装Superset步骤,遇到的各种问题。 报错问题: Linux下pip版本问题 You are using pip version 8.1.2, however version 22.2.2 is available. 解决办法: 安装python3的pip yum install python3-pip再升级 pip3 install…

家政服务行业搭建小程序的实用技巧分享

随着移动互联网的发展,小程序成为了各行各业的新宠。对于家政服务行业来说,搭建一个小程序商城可以极大地提升服务的便捷性和用户体验,同时也能提高企业的竞争力。本文将分享家政服务行业搭建小程序的实用技巧,帮助您顺利创建属于…

深度适配?华为鸿蒙OS智能座舱酷狗音乐车载版5.0,车内尽享K歌

此次华为 HarmonyOS 智能座舱酷狗音乐车载版 5.0 升级为搭载了 HarmonyOS 车机系统的多款车型带来了更丰富的功能和互动体验。新版本的升级内容主要包括创新交互设计和高品质音质两个方面。 在创新交互设计方面,华为 HarmonyOS 智能座舱酷狗音乐车载版 5.0 深度适配…

4G智慧电力物联网:建设高效智能,引领电力行业革新!

随着4G与物联网技术的快速发展为电力行业提供了更高效、可靠、智能化的解决方案。本文中智联物联将为大家分享智慧电力系统中的一些关键的物联网技术和通讯设备,如工业4G路由器、分布式发电站、数据采集传输、远程监控管理以及变电站监测。 光伏发电站是电力行业中重…

Python实现企业微信群告警

Python实现企业微信告警 1. 创建企业微信群机器人 1-1. 什么是企业微信群机器人? 企业微信群机器人是企业微信平台提供的一种功能,可以通过Webhook方式将消息发送到指定的企业微信群中。它可以用于自动化发送通知、告警等信息,实现监控和信…

好用的网页制作工具就是这6个,快点来看!

对于网页设计师来说,好用的网页设计工具是非常重要的,今天本文收集了6个好用的网页设计工具供设计师自由挑选使用。在这6个好用的网页设计工具的帮助下,设计师将获得更高的工作效率和更精致的网页设计效果,接下来,就一…

SQL语法与DDL语句的使用

文章目录 前言一、SQL通用语法二、DDL语句1、DDL功能介绍2、DDL语句对数据库操作(1)查询所有数据库(2)查询当前数据库(3)创建数据库(4)删除数据库(5)切换数据…