线程与进程的区别_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,一经查实,立即删除!

相关文章

linux nand 坏块_Nand Flash 中的坏块(Bad Block)

Nand Flash 中,一个块中含有 1 个或多个位是坏的,就称为其为坏块 Bad Block。坏块的稳定性是无法保证的,也就是说,不能保证你写入的数据是对的,或者写入对了,读出来也不一定对的。与此对应的正常的块,肯定是写入读出都是正常的。坏块有两种:(1) 出厂时就有存在的坏块:一种是出厂…

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

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

date oracle 显示毫秒_Oracle date timestamp 毫秒 - 时间函数总结

yyyy-mm-dd hh24:mi:ss.ff 年-月-日 时&#xff1a;分&#xff1a;秒.毫秒关于毫秒&#xff1a;Oracle 毫秒的存储必须字段类型为 timestamp(6) –数字表示存储的毫秒位数--当前毫秒级时间select to_char(current_timestamp,yyyy-mm-dd hh24:mi:ss.ff6) from dual;--字符串转为…

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

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

body 没有被撑开_body没有高度设置背景色为什么可以全屏显示?

原标题&#xff1a;body没有高度设置背景色为什么可以全屏显示&#xff1f;--- 关于html和body的那些事还记得我们开发全屏页面或者是移动端页面时经常会设置一句话html, body { height: 100%; }是不是只知道用&#xff1f;却不知道怎么回事&#xff1f;原因是&#xff0c;当没…

python抽象工厂模式_Python设计模式之抽象工厂模式

Python设计模式之抽象工厂模式这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式&#xff0c;感兴趣的小伙伴们可以参考一下python面向对象编程入门&#xff0c;我们需要不断学习进步"""抽象工厂模式的实现"""import randomclass PetSh…

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

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

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

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

python打印所有花数_Python中使用while循环实现花式打印乘法表

废话不多说&#xff0c;直接上代码吧&#xff01; #python中&#xff0c;while语句用于循环执行程序&#xff0c;即在某个条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。#while是“当型”循环结构。i1while i20: print(i,end" ") i1…

cad线性标注命令_CAD线性标注如何使用的

我们应该知道每次画完图之后都会进行标注&#xff0c;所以在CAD标注也要活灵活用。但是很多同学还不知道。那么接下来下面是学习啦小编整理的一些关于CAD线性标注如何使用&#xff0c;供您参阅。CAD线性标注使用的方法您可以使用 DIM 命令创建水平、垂直、对齐和半径标注。标注…

转行学python后悔_月薪13k的我为什么要转行学Python?

在职业规划包括人生方向上&#xff0c;选择很重要。一句很经典的话做总结“方向不对&#xff0c;努力白费”。选择自己感兴趣的工作&#xff0c;全力以赴投入其中&#xff0c;“唯有爱的深&#xff0c;才能做的好”当你付出不亚于任何人的努力&#xff0c;出彩是必然的。作为职…

python流式下载处理_流式下载 - 对象存储 OSS - 阿里云

如果要下载的文件太大&#xff0c;或者一次性下载耗时太长&#xff0c;您可以通过流式下载&#xff0c;一次处理部分内容&#xff0c;直到完成文件的下载。以下代码用于流式下载文件&#xff1a;# -*- coding: utf-8 -*-import oss2# 阿里云主账号AccessKey拥有所有API的访问权…

python程序如何封装成接口_python接口自动化如何封装获取常量的类

这篇文章主要介绍了python接口自动化如何封装获取常量的类,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下背景&#xff1a;一、执行case的过程&#xff1a;首先需要&#xff0c;我们能够通过excel获取单元格的内…

华为云备份会上传私密相册吗_2 亿部华为手机背后,这个功能不能忽视

原标题&#xff1a;2 亿部华为手机背后&#xff0c;这个功能不能忽视华为消费者业务昨天宣布&#xff0c;在全球消费者和合作伙伴的热情支持下&#xff0c;凭借华为 P20 系列、Mate20 系列、荣耀10 等多款华为、荣耀机型在市场上的优异表现&#xff0c;2018 年华为智能手机发货…

python批量识别图中文字自动命名_python实现批量命名照片

python批量命名照片的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下废话不多说&#xff0c;上效果图全部代码from tkinter import *import os#添加文件夹路径def rename():path entry.get()filelist os.listdir(path) #获取文件路径total_num len(filelist) #获取…

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

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

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

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

bootstraptable合并标题_bootstrapTable 合并单元格

/*** 合并单元格* param data 原始数据(在服务端完成排序)* param fieldName 合并属性名称* param colspan 合并列* param target 目标表格对象*/function mergeCells(data,fieldName,colspan,target){//声明一个map计算相同属性值在data对象出现的次数和var sortMap {};for(v…

python爬虫beautifulsoup_python爬虫初步之BeautifulSoup实战

1.学习beautifulsoupStep.1 BeautifulSoup是基于标签的&#xff0c;所以我们第一步要准确定位到我们需- 要信息所在的标签。Step.2 从定位的标签中提取我们需要的信息(一般在属性或者在string中)Step.3 对于提取数据的简单处理2.使用beautifulsoup提取丁香园论坛的回复内容2.1用…

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

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