原子性:指在一个操作中,所有的子操作都是一个整体,要么同时全部执行,要么同时不执行,且在执行过程中,不能被挂起,直到执行完。基本类型不大于32位的都具有原子性,对于大于32位的基本类型,例如:Long丶Double变量,看作2个原子性为32位值时,而不是一个原子性64位值,这样的一个long型值保存到内存的时候,可能执行2次32位操作,2个竞争线程想写不同的值到内存的时候,可能导致内置的值不正确结
原创 2024-04-03 16:01:01
56阅读
并发编程的特性原子性 一个操作或者多次操作,所有的操作全部都执行且不会受到任何因素的干扰而中断。要么都执行,要么都不执行。synchronized可以保证代码片段的原子性。可见性 当一个线程对共享变量进行了修改,那么另外的线程都是立即可以看到最新修改的值。volatile关键字可以保证共享变量的可见性。有序性 代码在执行的过程中先后顺序,java在编译器以及运行期间的优化,代码的执行顺序未必就
前言前面讲过使用synchronized关键字来解决“线程安全”问题,其本质是将“并行”执行改“串行”,也就是所谓的“同步”,前面也讲过这种方式的代价较高。在java中还提供一种弱化版的同步机制:volatile变量。为什么说是弱化版的同步机制呢?首先看下在使用synchronized关键字保证的 (强)同步机制的特性说起:原子性、可见性、有序性,也就是说使用synchronized加锁可以同
转载 2023-11-25 20:42:50
47阅读
Java并发编程中的特性分别是原子性、可见性和有序性,它们分别靠以下机制实现:原子性:原子性指的是对于一个操作,要么全部执行,要么全部不执行。Java提供了一些原子性操作,例如AtomicInteger等,它们使用了底层的CAS(Compare and Swap)操作来保证操作的原子性。CAS操作是一种乐观锁技术,当期望值和实际值相同时,才会进行更新操作,否则会进行重试。可见性:可见性指的是当
前言Java代码在经过编译后变为Java字节码,通过JVM执行字节码,最终转化为汇编指令在CPU上执行。需要我们了解的是:Java中所使用的并发机制依赖于JVM的实现和CPU的指令。本次我们就来跟随方腾飞老师的脚步一起简单了解一下Java并发机制的底层实现原理。 1、volatile的应用volatile修饰的变量如果使用恰当,执行成本低于synchronized,因为不会引起线程上下文的切换和调
转载 2023-10-31 12:42:38
54阅读
volatile是Java虚拟机提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级。 volatile具有特性: 保证可见性 不保证原子性 禁止指令重排序 1. JMM(Java
转载 2020-07-27 01:14:00
113阅读
一:      并发是指一个处理器同时处理多个任务。      并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。      并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。      来个比喻:并发
1、原子性保证一个操作或多个操作要么全部执行且在执行过程中没有任何打断、要么全部不执行(有点类似于事务的概念)例如A向B汇款1000元,那么就需要有两个操作,一个是A账户减1000元,另一个是B账户增加1000元,如果这个过程中任何一个操作出现故障,都是不符合规矩的也是不能保障汇款人和收款人的财产安全。换句话说,如果想要保证每次转账都不会造成双方任何一方的财产损失,我们必须要保证操作的原子性。2、
1.并行和并发并行:即同时进行,指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。2.并发特性(可见性、有序性、原子性)JMM内存模型 1.0.可见性
原创 2023-03-18 11:47:48
125阅读
1.并行和并发并行:即同时进行,指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。2.并发特性(可见性、有序性、原子性)JMM内存模型 1.0.可见性
原创 2023-03-18 11:47:05
145阅读
并发编程特性 1.原子性 2.有序性 3.可见性 可见性 由于缓存机制,导致不同cpu核心操作同一个变量的时候会出现数据不一致情况 级缓存 现代一颗cpu一般会包含多个cpu核 如4颗8核 每个cpu核包含L1,L2缓存,每颗cpu包含L3缓存.L1,L2是核独享,L3是cpu的所有核共享 c
原创 2023-08-18 09:06:20
67阅读
工作中许多地方需要涉及到多线程的设计与开发,java多线程开发当中我们为了线程安全所做的任何操作其实都是原...
原创 2022-06-30 10:59:03
269阅读
原子性原子性是指在一个操作中cpu不可以在中途暂停然后再调度,即不被中断操作,要不全部执行完成,要不都不执行。 要保证原子性,最常见的方式是加锁,如Java中的Synchronized或Lock都可以实现package com.paddx.test.concurrent; public class ShareData { public static int count = 0;
转载 2024-01-28 19:26:54
64阅读
并发特性并发编程的Bug大源头:可见性、原子性、有序性。可见性: 当一个线程修改了共享变量的值,其它线程是能够看到修改的值的;通过在其它线程读取变量之前,把修改后的变量同步给主内存来实现可见性的。如何保证可见性:通过volatile关键字保证可见性;通过内存屏障保证可见性;通过synchronized关键字保证可见性;通过lock保证可见性;通过final关键字保证可见性(X86底层也是有
转载 2023-12-25 10:22:09
56阅读
并发机制是一种常用的提升计算机运算效率的一种机制,这种机制针对的问题,可能看了很多遍书的人都没有想过。这个问题是:CPU的运算速度要超过内存存取的速度很多,内存存取的速度要超过外部I/O的速度很多。于是为了提高CPU的有效利用率,人们想到了一种办法,就是让CPU同时同时执行多项任务,CPU进行分时工作,这样就引申出了并发的概念。并发要解决的问题:任务的优先级、资源的分配,任务调度等一系列的问题。由
转载 2023-07-20 17:33:48
17阅读
文章目录​​一、前言​​​​二、大源头​​​​2.1 缓存导致可见性问题​​​​2.1.1 理论:从单核CPU到多核CPU​​​​2.1.2 实践:多线程可见性问题​​​​2.2 线程切换带来的原子性问题​​​​2.3 编译优化带来的有序性问题​​​​2.3.1 第一,经典案例:双重检查创建单例对象​​​​2.3.2 第二,我们认为的new操作:instance = new Singleton(
原创 2022-01-12 17:39:22
389阅读
  文章目录 一、前言 二、大源头 2.1 缓存导致可见性问题 2.1.1 理论:从单核CPU到多核CPU 2.1.2 实践:多线程可见性问题 2.2 线程切换带来的原子性问题 2.3 编译优化带来的有序性问题 2.3.1 第一,经典案例:双重检查创建单例对象 2.3.2 第二,我们认为的new操作:instance = new Singleton(); 2.3.3 第,实际优化后
原创 2021-07-21 14:25:50
205阅读
java特性:封装:把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。 1: 概念:指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系. 2: 好处:(1)实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序
转载 2023-08-25 17:18:38
74阅读
并发特性: 原子性:即对于一组操作,要么都成功,要么都失败。例如常见的转账操作就必须保证原子性。 可见性:每个线程的私有内存改变变量值时,其他线程对其可见。原因是每个线程为了提高运行效率,会从主存获取数据到本地,本地数据更新后,其他线程未同步数据,会道闸数据异常。 有序性:程序按一定的顺序执行, ...
转载 2021-10-15 09:51:00
173阅读
2评论
多态概述多态是继封装、继承之后,面向对象的第特性。现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张既是学生也是人,即出现两种形态。 Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现
转载 2023-12-05 13:56:18
60阅读
  • 1
  • 2
  • 3
  • 4
  • 5