多线程(二)

news2024/11/27 20:35:03

一.关于线程的常用操作

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; //设立标志位
         @Override
         public 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{
        @Override
        public 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.coloradmin.cn/o/940383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

参加校招面试测试岗位一次次被刷,耗时一个多月经常偷偷在晚上哭

前言 前两天有粉丝联系我,说他软件工程专业,大厂校招屡次被刷,有一个已经到了三面,还是被刷了,感觉很绝望,不想找工作了。邮箱里也有很多信息,初试都没有过,找工作太难了&#xff0…

财务软件的必要性与优势:为什么企业需要投资财务管理工具?

财务管理是每家企业的核心,可以说财务管理如何关系到企业是否顺利运行。随着企业业务规模的扩大及其复杂性的增加,手工处理财务数据和流程变得越来越困难和难以控制。因此越来越多的企业选择配备一款好用的财务软件来帮助自己进行财务管理。 财务管理的作…

QT初学者该安装qt creator哪个版本?

对于Qt初学者,建议安装最新版本的Qt Creator。Qt Creator是Qt官方提供的集成开发环境(IDE),用于开发Qt应用程序。每个Qt版本都会配套提供对应的Qt Creator版本,确保兼容性和稳定性。同时,选择合适的Qt版本也…

因果推断(六)基于微软框架dowhy的因果推断

因果推断(六)基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建:「图模型」与「潜在结果模型」。具体来说,其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应;而在估计阶段则主要…

芯片 半导体 晶圆

芯片(chip)就是半导体元件产品的统称,是 集成电路(IC, integrated circuit)的载体,由晶圆分割而成。 半导体集成电路是将很多元件集成到一个芯片内, 以处理和储存各种功能的电子部件。由于半导…

动态场景建图 Removert(offline) 和 DynamicFilter(online)前端部分对比

1.Removert 简单来说2020年的REMOVERT是针对动态环境下的建图进行优化的一篇很好的作品。 针对的主要问题:若是采用点云特征进行匹配的话,动态障碍物在预处理阶段也会被剔除。那么,另一个方面,动态障碍物对点云地图的构建的影响在…

实验篇—— 基因家族Motif 分析

实验篇—— 基因家族Motif 分析 文章目录 前言一、名词解释二、实操1. MEME工具箱2. Motif Discovery(基序发现)1. 结果网页2. 在TBtools中(额外) 2. Motif Enrichment(基序富集分析)3. Motif Search&#…

docker network

docker network create <network>docker network connect <network> <container>docker network inspect <network>使用这个地址作为host即可 TODO&#xff1a;添加docker-compose

【Leetcode】124.二叉树中的最大路径和(Hard)

一、题目 1、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其…

兼容AD210 车规级高精度隔离放大器:ISO EM210

车规级高精度隔离放大器&#xff1a;ISO EM210 Pin-Pin兼容AD210的低成本,小体积DIP标准38Pin金属外壳封装模块&#xff0c;能有效屏蔽现场EMC空间干扰。功能设计全面&#xff0c;采用非固定增益方式&#xff0c;输入信号经过输入端的前置放大器&#xff08;增益为1-100&#x…

Zblog博客网站搭建与上线发布:在Windows环境下利用cpolar内网穿透实现公网访问的指引

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…

快速使用Git完整开发

0.Git的下载 在这一节Git下载帮助文档里简单提及了不同平台下Git的下载。 注意&#xff1a;我们目前&#xff08;在您还对Git一知半解的时候&#xff09;不推荐使用任何图形化界面&#xff0c;这对您的学习作用不大&#xff0c;除非您已经熟练操作Git命令和Git的相关概念&…

性能测试平台RunnerGo:提升企业级应用性能的秘密武器

在当今的信息化时代&#xff0c;性能测试已经成为企业级应用开发过程中必不可少的一环。然而&#xff0c;传统的性能测试工具往往不能满足日益增长的企业需求。在这样的背景下&#xff0c;一款名为RunnerGo的性能测试平台正受到越来越多企业的青睐。本文将深入介绍RunnerGo的优…

深入解析进程:探索计算机并发世界的核心机制

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

kafka集群之kraft模式

一、概要 Kafka作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;在消息应用中广泛使用&#xff0c;在Kafka2.8之前&#xff0c;Kafka强依赖zookeeper&#xff0c;这也导致当Zookeeper集群性能发生抖动时&#xff0c;Kafka的性能也会收到很大的影响。2.8版本之后&#xf…

pd.cut()函数--Pandas

1. 函数功能 将连续性数值进行离散化处理&#xff1a;如对年龄、消费金额等进行分组 2. 函数语法 pandas.cut(x, bins, rightTrue, labelsNone, retbinsFalse, precision3, include_lowestFalse, duplicatesraise, orderedTrue)3. 函数参数 参数含义x要离散分箱操作的数组&…

ES6 新特性

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理前端技术的JavaScript的知识点ES6 新特性文件上传下载&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

ardupilot开发 --- EKF篇

状态估计的算法发展 参数调试 AHRS_EKF_USE: set to “1” to use the EKF, “0” to use DCM for attitude control and inertial nav (Copter-3.2.1) or ahrs dead reckoning (Plane) for position control. In Copter-3.3 (and higher) this parameter is forced to “1” …

Maven报错 [ERROR] Malformed \uxxxx encoding.

IDEA刷新项目&#xff0c;报错[ERROR] Malformed \uxxxx encoding. 现象 1.控制台报错 [ERROR] Malformed \uxxxx encoding.2.项目代码大部分爆红 3.Pom文件不爆红 4.IDEA未能构建Dependencies 尝试清除IDEA缓存无效&#xff0c;重新克隆项目无效&#xff0c;更换低版本mav…

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统&#xff0c;能够更快速的查询信…