多线程(二)

一.关于线程的常用操作

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.没有保证可见性,没有保证可见性就是一个线程对于一个变量的修改,没有及时被其他线程看到。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

交通科技与管理杂志社交通科技与管理编辑部2023年第9期目录

专家论坛 黑龙江省经济高质量发展与生态环境保护耦合协调发展研究 刘降斌;祃玉帅; 1-5142 我国省际数字经济高质量发展水平综合评价研究 耿娟;毕晨曦; 6-8 振兴龙江《交通科技与管理》投稿邮箱:cn7kantougao163.com(注明投稿“《交通科技与管理》”) 数…

代码随想录Day_48打卡

①、打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房…

3、当今的企业架构分析

3、当今的企业架构分析 3、分库分表水平拆分(MySQL集群) 因为一个数据库装不下了,需要分库分表,读写分离,主从复制,主节点M与从节点s组成了一个数据库的集群,组成了一个小的单元,前端…

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

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

骨传导耳机对骨头好不好?骨传导耳机对耳朵有影响吗

骨传导耳机是通过将声音以振动的形式传递到颅骨,再由内耳感知而不需要通过传统的声音传导路径(即耳道和鼓膜)。由于不直接接触耳朵或耳道,骨传导耳机在一定程度上减少了对耳部的压力和刺激,因此对骨头相比传统耳机来说…

yo!这里是Linux基础开发工具介绍

目录 前言 基础开发工具 yum vim 1.基本介绍 2.基本操作 3.正常模式常用命令 4.底行模式常用命令 gcc/g gdb 1.基本介绍 2.常用操作 make/Makefile 1.背景 2.介绍 3.使用 git 1.介绍 2.操作 进度条程序简单实现 后记 前言 在学完初步的基础指令及权限控…

lua的函数

1.一个示例实现列表的元素的求和 [root]# more funcAdd.lua function add(a)local sum 0for i 1,#a dosum sum a[i]endreturn sum enda {1,2,3,4,5,6}local sum add(a)print(sum)

【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容

文章目录 前言一、下载二、使用步骤1.引入样式2.html代码 总结 前言 提示:这里可以添加本文要记录的大概内容: vue后台框架,若依系统里有一个富文本编辑器,效果如下 在package.json里面查看,发现插件名叫quill 插件的…

复习之docker部署--项目实战

一、实验环境 1.安装7.6虚拟机 最小化安装,不安装图形! 2.封装虚拟机 关闭selinux关闭防火墙关闭networkmanager配置网络,保证可以ssh修改主机名添加双向解析配置7.6网络仓库--安装常用的工具 配置完成后,在真机ssh虚拟机 如果…

VUE笔记(一)初识vue

一、vue的简介 1、什么是vue 官网地址:Vue.js Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 构建用户界面:之前在学习vue之前通过原生js对DOM操作进行构建用户界面的 使用原生js构建用户界面的不足 - 没有规范&#xff0c…

Webgl利用缓冲区绘制三角形

什么是attribute 变量 它是一种存储限定符&#xff0c;表示定义一个attribute的全局变量&#xff0c;这种变量的数据将由外部向顶点着色器内传输&#xff0c;并保存顶点相关的数据&#xff0c;只有顶点着色器才能使用它 <!DOCTYPE html> <html lang"en"&g…

Mybatis小记

目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…

Redis进阶 - JVM进程缓存

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis进阶 - JVM进程缓存 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-jvm-process-cache.html 传统缓存的问题 传统的缓存策略一般是请求到达 Tomcat 后&#xff0c;先查询 Redis &…

跨专业申请成功|金融公司经理赴美国密苏里大学访学交流

J经理所学专业与从事工作不符&#xff0c;尽管如此&#xff0c;我们还是为其成功申请到美国密苏里大学经济学专业的访问学者职位&#xff0c;全家顺利过签出国。 J经理背景&#xff1a; 申请类型&#xff1a; 自费访问学者 工作背景&#xff1a; 某金融公司经理 教育背景&am…

去掉vue项目运行时中出现的黄色警告

最近在写vue项目时发现想测试一个接口行不行的时候&#xff0c;在控制台输出的时候发现会有很多黄色警告&#xff0c;每次都要找很久才能找到自己想输出的内容&#xff0c;如下图&#xff1a; 去掉这些只需要一句话&#xff1a; const app createApp(App) app.config.warnHa…

一文便知 GO 中mongodb 的安装与使用

MONGDB 安装与使用 咱们来回顾一下上次分享的内容&#xff1a; 如何使用log 包log 包原理和具体实现自定义日志 要是对 GO 的日志包还有点兴趣的话&#xff0c;可以查看文章 GO的日志怎么玩 ? 今天咱们来玩个简单的 mongodb 的安装和使用 MONGODB介绍 MongoDB 是一个基于…

Django(2)-编写你的第一个 Django 应用

本教程的目的是创建一个网络投票应用程序。 它将由两部分组成&#xff1a; 一个让人们查看和投票的公共站点。 一个让你能添加、修改和删除投票的管理站点。 创建应用 $ python manage.py startapp polls每一个应用是一个python包&#xff0c;一个项目可以包含多个应用。 …

C++ 改善程序的具体做法 学习笔记

1、尽量用const enum inline替换#define 因为#define是做预处理操作&#xff0c;编译器从未看见该常量&#xff0c;编译器刚开始编译&#xff0c;它就被预处理器移走了&#xff0c;而#define的本质就是做替换&#xff0c;它可能从来未进入记号表 解决方法是用常量替换宏 语言…

无涯教程-PHP - 返回类型声明

在PHP 7中&#xff0c;引入了一个新函数返回类型声明&#xff0c;返回类型声明指定函数应返回的值的类型&#xff0c;可以声明返回类型的以下类型。 intfloatbooleanstringinterfacesarraycallable 有效返回类型 <?phpdeclare(strict_types1);function returnIntValue(i…

【Midjourney电商与平面设计实战】创作效率提升300%

不得不说&#xff0c;最近智能AI的话题火爆圈内外啦。这不&#xff0c;战火已经从IT行业燃烧到设计行业里了。 刚研究完ChatGPT&#xff0c;现在又出来一个AI作图Midjourney。 其视觉效果令不少网友感叹&#xff1a;“AI已经不逊于人类画师了!” 现如今&#xff0c;在AIGC 热…