线程与进程的区别_Java线程和PC进程的区别

进程和线程的区别

  • 进程:资源分配的基本单位,多存在于操作系统任务中
  • 线程:资源调度的基本单位,一般存在于某个程序中

JVM

主内存与工作内存间具体的交互

A:作用范围主内存变量

B:作用范围工作内存变量

lock(锁定)

A,将变量标识成线程独有

unlock(解锁)

A,解锁变量,解锁后的变量才能被其他线程锁定

read(读取)

A,把变量的值从主内存传输到线程工作内存中以便load动作使用

load(加载)

B,将read操作从主内存中获取到的变量值放入工作内存的变量副本

use(使用)

B,将工作内存中变量的值传递给执行引擎

assign(赋值)

B,接收从执行引擎传递的值赋值给工作内存变量

store(存储)

B,将工作内存中的变量的值传送到主内存,方便write操作使用

write(写入)

A,将store操作从工作内存中得到的变量值放入主内存变量中

  • 线程模型 OS Kernel Thread
  • Hotspot模型

Mark Word(对象哈希码、GC标志、GC年龄、同步锁)信息

Klass Point(指向存储类型元数据的指针)

字节对齐的填充数据

CAS(轻量级锁)

  • compare and swap(比较和交换)
  • compare and exchange(比较和交换)
  • compare and set(比较和设置)ABA问题

偏向锁(已在JDK最高版本中去除):

时延默认4秒

自旋锁:

轻量级锁:

需要消耗CPU资源

重量级锁:

通过操作系统(OS)管理,不需要消耗CPU资源

CPU 缓存 内存

缓存行:Cache Line,

缓存一致性协议 ,多处理系统共享主内存,缓存数据时可能导致缓存数据不一致,所要遵循的协议:MESI、MSI、MOSI、Synapse、Firefly和Dragon Protocol

FalseSharing(伪共享)

缓存行中,多线程修改相互独立的变量时,如果变量恰好存在于同一个缓存行,会影响(写回、无效化或者同步)导致性能降低

Volatile(轻量级同步机制)

  • 保持线程可见性
  • 禁止指令重排序

java中运算并非原子操作,将会导致volatile变量的运算在并发模式下一样不安全。

 public class VolatileTest { //  变量     private static volatile int rcc = 0; //  测试线程数量     private static final int THREAD_COUNT = 20;      public static void inc() {         rcc++;     }      public static void main(String[] args){         Thread[] threads = new Thread[THREAD_COUNT];         for (int i = 0; i < THREAD_COUNT; i++) {             threads[i] = new Thread(()->{                 for (int i1 = 0; i1 < 10000; i1++) {                     inc();                 }             });             threads[i].start();         }         while(Thread.activeCount() > 1){             Thread.yield();         }         System.out.println(rcc);     } }

最后输出的结果不正确

 package com.flowable.ums.thread; ​ import java.util.concurrent.atomic.AtomicInteger; ​ public class VolatileTest {     //  变量     private static AtomicInteger rcc = new AtomicInteger(0);     static void inc() {         rcc.incrementAndGet();     }     public static final int THREAD_COUNT = 20;     public static void main(String[] args) {         Thread[] threads = new Thread[THREAD_COUNT];         for (int i = 0; i < THREAD_COUNT; i++) {             threads[i] = new Thread(()->{                 for (int i1 = 0; i1 < 10000; i1++) {                     inc();                 }             });             threads[i].start();         }         while (Thread.activeCount() > 1) {             Thread.yield();         }         System.out.println(rcc);     } }

线程通信

LockSupport.park() 和 unpark()

ReentrantLock(锁) & Condition(队列)

TransferQueue(交换队列)


Atomic::cmpxchg

b7b0f2c0aa101edd473d06f1380c321b.png

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

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

相关文章

生产管理erp系统源码_仁和ERP企业管理系统提高生产管理流程

传统的制造企业管理理念只会阻碍公司经营发展&#xff0c;在管理流程根本上去改变&#xff0c;还得从企业各部门管理思想的转变做基础&#xff0c;优化公司核心业务流程做标准&#xff0c;双向进行改革创新&#xff0c;将管理流程提升为企业的核心竞争力&#xff01;这将是企业…

怎么把字符串变成数组_字符串哈希:从零开始的十分钟包会教程

大家吼啊&#xff01;这是我下定决心写专栏以来的第二篇文章&#xff0c;请大家多多资瓷&#xff01;&#xff01;同样我们先以上次的话起头吧&#xff01;恭喜你找到了这篇博客&#xff01;虽然这个标题看起来非常像是nc营销号的标题但是&#xff01;请相信我一次这是真的&…

岗位理解_当面试官问求职者对应聘岗位的理解情况

虽然求职是看的是岗责是否匹配自己的经历和能力&#xff0c;但是很多面试官还是会问这样的问题。对于求职者来说&#xff0c;对岗位的理解其实就是把岗位职责背一遍&#xff0c;但是面试官既然问了&#xff0c;就要说出一些其他内容来。想回答好这个问题&#xff0c;就要清楚面…

指针和引用的区别_浅析指针与引用

关注“杜明c”&#xff0c;每天进步一点点&#xff01;已经时隔一个多月没有发文章了&#xff0c;主要是太忙了&#xff0c;绝不是偷懒今天给大家聊一聊指针和引用的不同之处在哪里。摘要指针的使用引用的使用二者的区别后话指针的使用在C语言中&#xff0c;我们怎么样在子函数…

运行catia_教程 | CATIA宏的录制及应用

首先和大家聊一聊宏。宏&#xff0c;英文Macro&#xff0c;是很多软件中都带有的功能&#xff0c;能够将一系列操作的过程录制下来&#xff0c;即将若干命令集合为一个命令&#xff0c;无论是CATIA还是Office软件&#xff0c;甚至很多游戏也有宏功能。用户基于录制的宏进行适当…

arccatalog点要素显示不完_如果你读不完显示屏说明书,至少读完这几句话吧

如果说起LED显示屏现在能够被那么多人熟知的原因&#xff0c;常规全彩LED显示屏绝对是不可或缺的基础&#xff0c;常规全彩屏有两大分类分别是户外全彩LED显示屏和室内全彩LED显示屏&#xff0c;这个很多人也都知道&#xff0c;但你知道它们的区别在哪吗&#xff1f;让我们力诺…

css 模拟器方向_GDS变方向动态循环单剪实验系统VDDCSS

原标题&#xff1a;GDS变方向动态循环单剪实验系统VDDCSS变方向循环简单剪切(VDDCSS)允许在两个方向进行简单剪切&#xff0c;而不是标准单向。这通过具有作用于其上的次级剪切作动器来实现&#xff0c;此剪切作动器与主剪切作动器相差90度排布。当用作可变方向的机器时&#x…

antd table动态表头_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...

1、固定表头后表体列和表头不对齐此问题可能在antd3.24.0版本以前都存在&#xff0c;反正3.16.2版本是存在这个问题的&#xff0c;若是是3.24.0以前的版本估计只能经过修改css样式解决。css按照官网说的&#xff1a;react一、若列头与内容不对齐或出现列重复&#xff0c;请指定…

vue通过class获取dom_.NET Core通过Json或直接获取图形验证码(务必收藏备用)

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;殷慈航cnblogs.com/jiyuwu/p/11803979.html很多人写的博客大家看了会一知半解&#xff0c;不知道怎么用&#xff0c;应该引用什么类库或者代码不全&#xff0c;这样很多小白很是头疼&#xff0c;尤其是尝新技术更是如…

c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本

相信很多同学在初学C语言时候&#xff0c;都会遇到遇到一个问题&#xff1a;指针&#xff0c;永远的神&#xff01;好消息&#xff0c;这个痛点将会在这篇文章得到解决&#xff0c;妈妈再也不用担心我的学习了&#xff01;一说指针&#xff0c;第一反应&#xff0c;指针是一种数…

安卓menu页面跳转_微信安卓版7.0.14内测!“发现小程序”页面大改版

除了安卓用户心心念念的“群备注”&#xff0c;“发现-小程序”面板也有大变动~话不多说&#xff0c;赶紧下载内测版体验新功能(后台回复【7014】&#xff0c;即可获取内测版下载链接)群备注&#xff1a;虽迟但到此前iOS版微信率先上线的新功能&#xff0c;这次在安卓内测版中也…

css before after用法_CSS 伪元素基础知识:content 与counter 实用技巧(二)

在CSS 伪元素基础知识&#xff1a;before 与after (一)&#xff0c;笔者已经介绍过 CSS 里的::before 和::after 这两个伪元素&#xff0c;以及content 相关的用法&#xff0c;这篇将针对content 搭配counter (计数器) 进行一些有趣的应用&#xff0c;相信熟练之后搞不好能做出…

c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

在C语言程序开发中&#xff0c;动态内存分配是不可避免的&#xff0c;而调用 malloc()/free() 库函数实现这一过程是方便的&#xff0c;事实上&#xff0c;在很多C语言程序中&#xff0c;malloc/free 库函数的使用相当频繁&#xff0c;它俩的C语言函数原型如下&#xff0c;请看…

mysql datetime最小值_MySQL的5种时间类型的比较

日期时间类型占用空间日期格式最小值最大值零值表示DATETIME8 bytesYYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00TIMESTAMP4 bytesYYYY-MM-DD HH:MM:SS197001010800012038 年的某个时刻00000000000000DATE4 bytesYYYY-MM-DD1000-01-019999-1…

Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下&#xff0c;希望能帮助到大家。数据备份与还原第一篇分享给大家&#xff0c;具体内容如下基础概念&#xff1a;备份&#xff0c;将…

mysql数据库云读取_云数据库 MySQL版

{"moduleinfo":{"banner_bigTit":"云数据库 MySQL版读写分离上线","banner_subTit":"自动扩展读写分离&#xff0c;性能提升不止一点","banner_link":"https://rdsnew.console.aliyun.com/console/index#/rd…

mysql查询并设置高亮_慢查询分析调优工具~mysqldumpslow

在日常的业务开发中&#xff0c;MySQL出现慢查询是很常见的&#xff0c;要么说明你家产品的增长性很好&#xff0c;要么就是你的SQL写的太烂了。所以对慢查询SQL进行分析和优化很重要&#xff0c;其中mysqldumpslow是MySQL服务自带的一款很好的分析调优工具。MySQL慢查询日志My…

非法的表达式开始_轮回、开始还是结束?

上节课说到&#xff0c;要打印0-9这十个数字&#xff0c;除了一个一个的 document.write 还有什么办法?下面介绍一个for语法for (var 变量 初始值; 结束判断表达式; 变量递增/递减) { 循环体&#xff0c;用于处理变量;}我们来实操一下for (var c0;c<9;cc1) { do…

sql 统计记录条数后 打印出所有记录_用SQL完成购买行为分析(下篇II)

&#xff08;接《用SQL完成购买行为分析&#xff08;下篇I&#xff09;》内容&#xff09;12&#xff09;查询首条记录为fav&#xff0c;总记录条数为14的记录。将前面getNum(3)红框处替换为12&#xff0c;运行getNum(14)得到第2条记录的数量&#xff1a;替换为11&#xff0c;得…

library的英语怎么读音_library怎么读声音

library的英式读音和美式读音均为&#xff1a;[ˈlaɪbrəri]。library可作名词&#xff0c;其作名词时&#xff0c;中文意思有&#xff1a;图书馆&#xff1b;藏书楼&#xff1b;图书室&#xff1b;资料室&#xff1b;(书、激光唱片等的)个人收藏等含义。一、library 读音英式…