学习-java多线程

线程的创建

*继承Tread,重写run
*实现Runnable接口,重写run() [匿名内部类]
*实现callable接口(有结果返回)

线程的常用方法

调用join保证这个方法先执行完成,

线程安全

并发编程

进程:就相当一个程序的实例
线程:就是指令流(一个进程包含多个线程)

并发:同一时间。一个cpu轮流执行
并行:两cup同时工作

lamda简化匿名内部类的写法

JVM:堆,栈,方法区
是线程用的,(后进先出)(执行完就会释放)
        *有多个栈帧组成,对应着每次方法调用时所占的内存
        *每个线程只能有一个活动栈帧,对应正在执行的方法
        递归会导致栈溢出

一个线程一个栈,一个方法一个栈帧

栈和栈帧
程序启动 在jvm的加载机制

1,将代码加载到 方法区(类加载)
2,栈启动mian主线程:  然后给线程的方法分配栈帧
new出来的对象放堆,方法执行完栈帧就会释放
线程的栈帧是独立的(程序计数器记录每个线程的执行到哪里-记录当前线程的状态
操作系统的任务调度器 分配时间片

上下文切换
让出cpu的时候
程序计数器d
记录当前线程的状态等信息(局部变量,等)
频繁的切换会影响性能

常见方法

start() 线程进入就绪状态   不能多次启动 会报错
run 新线程启动后会调用
join 等待线程运行结束
优先级(1-10)默认5-(cup空闲的时候 几乎没有用)
getStatus
isAlive

线程的状态有哪些5种
1,new
2,runnable就绪(
3,running运行
4 阻塞
5,Terminated终止

java线程的状态有哪些6种
1,new
2,runnable就绪()运行中的
3,blocked 阻塞(synchronize)
4,Waiting 等待-要唤醒 (join)
5,Timed Waiting 计时等待 -阻塞(sleep)
6,Terminated终止

sleep:
*调用会 计时等待(线程状态:runing变Timed Waiting(阻塞让出cup):类似于等待状态
*通过其他线程调用interrupted(),打断睡眠(会抛interrupted异常)
*睡眠结束后 未必立即执行(让出cup)
*TimeUnit的sleep可读性更好 可以替换thread的sleep
*阻塞线程

yield:
*
调用会 计时等待(线程状态:runing变runable(就绪))让出cup 如果没有其他操作还是会执行
*让给优先级高的,
*不阻塞线程

join
*等待线程运行结束-达到同步的目的,
*阻塞线程
join(long tim)最多等待

interrupt 打断

打断阻塞的线程 例如 sleep,wait,join
异常打断:(打断标记 flose)例如程序在执行sleep的时候  清除标记
正常常打断:(打断标记 true)
isinterrupt  不会清除标记

park 停止
打断标记为真的时候 失效

守护线程
*正常:java要等待所有线程结束才会结束,(不然主线程结束 子线程一样执行)
*如果非守护线程都结束,守护线程也强制结束(如果子线程是守护线程,主线程结束他也结束)
-垃圾回收就是守护线程

共享模型

synchronize工作
*monitor(监控系统提高的)重量级锁
*轻量级锁(翻书包看看是谁的)
*偏向锁(写上名字)可以批量修改重偏向
每一次都可能向上升级

轻量级锁:(如果有竞争会升级为重量级) 栈帧是对轻量级锁的实现
*访问时间是错开的
        锁膨胀:就是尝试加轻量级锁失败,升级为重量锁

重入锁:就是同一个对象再次如锁+1

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

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

相关文章

无重复字符的最长子串-中等

leetcode地址 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2:输入: s "bbbbb" 输出: 1 …

我有才打造私域流量的知识付费小程序平台

在当今数字化时代,知识付费市场正在迅速崛起,而私域流量的概念也日益受到重视。私域流量指的是企业通过自有渠道获取的、能够自由支配的流量,这种流量具有更高的用户粘性和转化率。因此,打造一个基于私域流量的知识付费小程序平台…

实现:切换页面切换标题,扩展 vue-router 的类型

布局容器-页面标题 网址:https://router.vuejs.org/zh/guide/advanced/meta 给每一个路由添加 元信息 数据 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

问题:数组对象去重

问题:数组对象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 对数组对象name进行去重处理, 结果显示为: [{name…

第一启富金:新添澳大利亚(ASIC)牌照

第一启富金:澳大利亞證券及投資委員會(ASIC) GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD(CAR 編號 001304943)的企業授權代表開發澳大利亞客戶,WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么? XML(Extensible Markup Language),中文是可扩展标记语言,是标准通用标记语言的子集。它是一种标记语言,用于标记电子文档,使其结构化。 XML可以用来标记数据,定义数据…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/

C#应用:MQTT分析——CONNECT为例子

源代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS应用程序框架——UIAbility实操

UIAbility概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互。UIAbility也是系统调度的单元&#xff0c;为应用提供窗口在其中绘制界面。 每一个UIAbility实例&#xff0c;都对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&…

Leetcode—901.股票价格跨度【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—901.股票价格跨度 算法思想 实现代码 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)浏览器插件简单自定义脚本开发

介绍 浏览器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通过它们可以实现浏览器网页的定制化与功能增强。 其他插件一般只有某种具体的功能&#xff0c;且已经写死而不能更改&#xff0c;比如Adblock插件只用于去广告。 油猴插件是一款用于管理用户脚本的插件&…

使用Rust 构建C 组件

协议解析&#xff0c;这不就很快了&#xff0c;而且原生的标准库红黑树和avl 树支持&#xff0c;异步tokio 这些库&#xff0c;编写应用组件就很快了 rust 标准库不支持 unix 的消息队列&#xff0c;但是支持 shm 和 uds&#xff0c;后者从多方面考虑都比&#xff0c;消息队列更…

教育类直播介绍

教育类直播是一种在线教育形式&#xff0c;它允许学生和教师通过实时视频通话进行互动学习。这种学习方式可以为学生提供更灵活的学习时间和地点&#xff0c;同时也可以帮助教师更好地与学生进行互动和指导。 在教育类直播中&#xff0c;学生可以通过网络与教师和其他学生进行…

c/c++中一些不常用但有用的知识

1.变长数组 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 语言中&#xff0c;变长数组&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 标准引入的特性&#xff0c;允许使用变量来定义数组的长度。因此&#xff0c;在 C 版本的代码…

快速在VMware虚拟机上运行Kali Linux(保姆级教程)

本期将演示如何在VMware虚拟机上快速、轻松地安装Kali Linux。Kali Linux是一款专为渗透测试和网络安全而设计的操作系统&#xff0c;拥有很多强大的工具和功能。 在运行任何虚拟机之前&#xff0c;一定要先确保已经打开主板BIOS上的虚拟化支持。 下载VMware 接着来到vmware的…

vue 一直运行 /sockjs-node/info?及 /sockjs-node/info报错解决办法

sockjs-node介绍 sockjs-node 是一个JavaScript库&#xff0c;提供跨浏览器JavaScript的API&#xff0c;创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。 服务端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客户端&a…

[全志Tina/Linux]全志修改bootlogo分区数据从而修改bootlogo

一、需求 在不进行镜像烧录的情况下&#xff0c;通过启动项或脚本将已存在于主板的bootlogo文件更新到bootlogo分区中&#xff0c;从而实现bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路径 find -name bootlogo* 实机效果&#xff1a; 2、进入文件夹路径 cd ./d…

Java网络编程——对象的序列化与反序列化

当两个进程进行远程通信时&#xff0c;彼此可以发送各种类型的数据&#xff0c;如文本、图片、语音和视频等。无论是何种类型的数据&#xff0c;都会以二进制序列的形式在网络上传送。当两个Java进程进行远程通信时&#xff0c;一个进程能否把一个Java对象发送给另一个进程呢&a…

LeetCode 每日一题 Day 6(DFS+BFS)

1466. 重新规划路线 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以改变…

c语言词法分析器

词法分析器&#xff08;也称为词法解析器或词法扫描器&#xff09;是编译器的一个组成部分&#xff0c;它的任务是将输入的源代码&#xff08;字符流&#xff09;分解成称为“标记”的序列&#xff0c;其中每个标记对应于源代码中的一个单词或符号。 以下是一个简单的C语言词法…