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

JAVA SE -- 第十五天

(全部来自“韩顺平教育”)

多线程

一、线程相关概念

1、程序:是为完成特定任务、用某种语言编写的一组指令的集合。

2、进程:是指运行中的程序,如QQ,就启动了一个进程,操作系统就会为该进程分配内存空间

进程是程序的一次执行过程,或是正在运行的一个程序,是动态过程:有它自身的产生、存在和消亡的过程。

3、线程:由进程创建的,是进程的一个实体。一个进程可以拥有多个线程。

4、单线程:同一个时刻,只允许执行一个线程

5、多线程:同一个时刻,可以执行多个线程。

6、并发:同一时刻,多个任务交替执行,造成一种“貌似同时”的错觉。简单地说,单核CPU实现的多任务就是并发。

7、并行:同一时刻,多个任务同时执行。多核CPU可以实现并行。

二、线程基本使用

1、创建线程的两种方式

①继承Thread类,重写run方法

class Cat extends Thread {int times = 0;@Overridepublic void run() {//重写 run 方法,写上自己的业务逻辑while (true) {//该线程每隔 1 秒。在控制台输出 “喵喵, 我是小猫咪”System.out.println("喵喵, 我是小猫咪" + (++times) + " 线程名=" +                Thread.currentThread().getName());//让该线程休眠 1 秒 ctrl+alt+ttry {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}if(times == 80) {break;//当 times 到 80, 退出 while, 这时线程也就退出..}}
}

②实现Runnable接口,重写run方法

注意:Java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然是不可能的

class Dog implements Runnable { //通过实现 Runnable 接口,开发线程int count = 0;@Overridepublic void run() { //普通方法while (true) {System.out.println("小狗汪汪叫..hi" + (++count) + Thread.currentThread().getName());//休眠 1 秒try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}if (count == 10) {break;}}}
}

2、继承Thread VS 实现Runnable 的区别

①从Java的设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别

②实现Runnable接口方式更适合多个线程共享一个资源的情况,并且避免了单继承的限制,推荐使用Runnable

三、线程终止

1、基本说明

当线程完成任务后,会自动退出;可以通过使用变量来控制run方法退出的方式停止线程,即通知方式

四、线程常用方法

1、第一组

 2、注意事项

①start底层会城建新的线程,调用run,run就是一个简单的方法调用,不会启用新线程

②线程优先级的范围

③interrupt,中断线程,但并没有真正的结束线程。一般用于中断正在休眠线程

④sleep:现成的静态方法,使当前线程休眠

3、第二组

 五、用户线程和守护线程

1、用户线程:也叫工作线程,当线程的任务执行完或通知方式结束

2、守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束

3、常见的守护线程:垃圾回收机制

六、线程的生命周期

1、JDK中用Thread.State枚举表示了线程的几种状态

 2、线程状态转换图

七、线程的同步

1、线程同步机制

①在多线程编程,一些敏感数据不允许被多个线程同时访问,此时就是用同步访问技术,保证数据在任何同一时刻,最多有一个线程访问,以保证数据的完整性

②也可以理解为:线程同步,即当有一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,知道该线程完成操作,其他线程才能对该内存地址进行操作

2、同步方法--Synchronized

①同步代码块

synchronized(对象){ //得到对象的锁,才能操作同步代码

        //需要被同步代码;

}

②synchronized还可以放在方法声明中,表示整个方法为同步方法

public synchronized void m(String name){

        //需要被同步代码;

}

八、互斥锁

1、基本介绍

①Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性

②每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象

③关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问

④同步的局限性:导致程序的执行效率要降低

⑤同步方法(非静态的)锁可以是this,也可以是其他对象(要求是同一个对象)

⑥同步方法(静态的)的锁为当前类本身。

 2、注意事项

①同步方法如果没有使用static修饰:默认锁对象为this

②如果方法使用static修饰,默认锁对象:当前类.class

③实现的落地步骤:

    需要先分析上锁的代码

    选择同步代码块或同步方法

    要求多个线程的锁对象为同一个即可!

九、线程的死锁

1、基本介绍

多个线程都占用了对方的锁资源,但不肯相让,导致了死锁,在编程时一定要避免死锁的发生

十、释放锁

1、下面操作会释放锁

①当前线程的同步方法、同步代码块执行结束

②当前线程在同步代码块、同步方法中遇到break、return

③当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致异常结束

④当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁。

 2、下面操作不会释放锁

①线程执行同步代码块或同步方法时,程序调用Thread.sleep()、Thead.yield()方法暂停当前线程的执行,不会释放锁

②线程执行同步代码块时,其他线程调用了该线程的suspend()方法将该线程挂起,该线程不会释放锁。

相关文章:

JAVA SE -- 第十五天

(全部来自“韩顺平教育”) 多线程 一、线程相关概念 1、程序:是为完成特定任务、用某种语言编写的一组指令的集合。 2、进程:是指运行中的程序,如QQ,就启动了一个进程,操作系统就会为该进程…...

macOS 环境变量加载探究

使用 macOS 安装环境,见到过很数种环境变量配置方法,每次也都是按照别人的代码,人家配置在哪 我就配置在哪,其实不太清楚有什么区别,决定记录下。 本机 macOS 13.3,从 macOS Catalina(10.15) 开始&#xf…...

在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值

std::thread::id() 是std::thread::id的默认构造函数,它会创建一个空的std::thread::id对象。一个空的std::thread::id对象代表一个无效的线程标识符。 可以通过 std::thread::id 的成员函数 std::thread::id::operator() 来判断一个 std::thread::id 是否是一个空值…...

ffmpeg-ffplay代码架构简述

全局变量 /* Minimum SDL audio buffer size, in samples. */ // 最小音频缓冲 #define SDL_AUDIO_MIN_BUFFER_SIZE 512 /* Calculate actual buffer size keeping in mind not cause too frequent audio callbacks */ // 计算实际音频缓冲大小,并不需要太频繁…...

⛳ 多线程面试-什么是多线程上下文切换?

目录 ⛳ 多线程面试-什么是多线程上下文切换?🎁 Java中用到的线程调度算法是什么?🎨 什么是线程饥饿 ?你对线程优先级的理解是什么? ⛳ 多线程面试-什么是多线程上下文切换&#xff…...

vb+SQL车辆管理系统设计与实现

摘 要 随着信息时代的到来,信息高速公路的兴起,全球信息化进入了一个新的发展时期。人们越来越认识到计算机强大的信息模块处理功能,使之成为信息产业的基础和支柱。 我国经济的快速发展,汽车已经成为人们不可缺少的交通工具。对于拥有大量车辆的机关企事业来说,车辆的…...

java的枚举类

枚举类的概念和使用 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类。 2.当需要定义一组常量时,强烈建议使用枚举类。对象便是所指的常量。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 定义枚举类…...

基于java早餐店点餐系统源码设计与实现

摘 要 多姿多彩的世界带来了美好的生活,行业的发展也是形形色色的离不开技术的发展。作为时代进步的发展方面,信息技术至始至终都是成就行业发展的重要秘密。不论何种行业,大到国家、企业,小到团体、个人都在多方位的结合信息化技…...

ODOO16如何处理采购运输正常损耗的成本价核算?

《会计准则》规定:商品流通企业在采购商品过程中发生的运输费、装卸费、运输途中的合理损耗都归为采购存货成本中。 例如:采购A产品1000个,单价10元/个,途中运输正常损耗率是5%,因此实际入库是950个,入库金…...

【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 白鲸优化算法BWO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 白鲸…...

函数式编程-将过程作为返回值的应用:分步过程

之前的文章提到函数式编程的一等函数(First-class Function)四个性质中有“可以将过程作为返回值”这一点,但这一点在实际使用中不如“将过程作为参数”(高阶函数)用得多。本文介绍一种这个性质用于分步函数的应用。 …...

Mysql-学习笔记

文章目录 1. 数据库1.1 Mysql安装及常用代码1.2 SQL介绍1.3 SQL分类1. DDL-操作数据库,表2. DML-对表中的数据进行增删改3. DQL-对表中的数据进行查询条件查询模糊查询排序查询分组查询分页查询 4. DCL-对数据库进行权限控制外键约束表关系-多对多多表查询事务 1. 数…...

【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块2

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...

Windows用户如何安装新版本cpolar内网穿透

Windows用户如何安装新版本cpolar内网穿透 文章目录 Windows用户如何安装新版本cpolar内网穿透 在科学技术高度发达的今天,我们身边充斥着各种电子产品,这些电子产品不仅为我们的工作带来极大的便利,也让生活变得丰富多彩。我们可以使用便携的…...

MacBookPro安装Win10,Wifi不能用了,触控板不能用了(2)

一、问题 去年在MacBookPro上装过Win10,当初只分配了60G空间。各方面原因需要重装系统,上个月装了一晚上,也无法连接Wifi,触控板只能当鼠标左键用。 后来发现是没有相关驱动造成的,于是从Mac系统联网找到网卡驱动&am…...

理解C++中变量的作用域

理解C中变量的作用域 常规变量(如前面定义的所有变量)的作用域很明确,只能在作用域内使用它们,如果您在作用域外使用它们,编译器将无法识别,导致程序无法通过编译。在作用域外面,变量是未定义的…...

vue+element-ui给全局请求设置一个loading样式

老项目后台管理,要在每个页面请求的时候都添加一个loading,为了统一和防止一个页面多次请求页面出现闪烁的情况同意在request.js中添加了一个全局loading。 想要的效果: 1.在请求的时候创建一个loading样式,请求结束是关闭。 2…...

传球游戏

题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个…...

智能卡通用安全检测指南 思度文库

范围 本标准规定了智能卡类产品进行安全性检测的一般性过程和方法。 本标准适用于智能卡安全性检测评估和认证。 规范性引用文件 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,…...

Maven设置阿里云路径(防止加载过慢)

<?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...