java原子性是什么_中级Java应该清楚的概念:原子性、可见性、有序性是什么?
java原子性是什么_中级Java应该清楚的概念:原子性、可见性、有序性是什么?原子性、可见性、有序性是多线程编程中最重要的几个知识点,由于多线程情况复杂,如何让每个线程能看到正确的结果,这是非常重要的,下面和千锋广州小编一起来看看吧!
原网站 java原子性是什么_中级Java应该清楚的概念:原子性、可见性、有序性是什么?…_我才是Guido的博客-CSDN博客](https://blog.csdn.net/weixin_42460182/article/details/114101352))
原子性原子性是指一个线程的操作是不能被其他线程打断,同一时间只有一个线程对一个变量进行操作。在多线程情况下,每个线程的执行结果不受其他线程的干扰,比如说多个线程同时对同一个共享成员变量n++100次,如果n初始值为0,n最后的值应该是100,所以说它们是互不干扰的,这就是传说的中的原子性。但n++并不是原子性的操作,要使用AtomicInteger保证原子性。
可见性可见性是指某个线程修改了某一个共享变量的值,而其他线程是否可以看见该共享变量修改后的值。在单线程中肯定不会有这种问题,单线程 ...
实际开发中常常遇到的问题 或是 遵守的规则
实际开发中常常遇到的问题 或是 遵守的规则
Maven子工程继承父工程利用Maven可以对项目进行分模块开发。那么怎样把各个模块整合到一起呢?这就利用了Maven继承的特性。一般是每个模块都继承一个父工程。
几个注意的地方:
(1)父工程的packaging是pom
(2)父工程中定义属性,子模块不用定义,会继承下来
(3)父工程的依赖放在dependencyManagement中,这样子模块才能继承父工程的依赖
(4)父工程的pom.xml文件中定义了modules,整合子模块的artifactId
(5)子模块的pom.xml文件中定义了parent标签,里面是父工程的gav
(6)子模块只需定义自己的artifactId
(7)子模块如果继承父工程的依赖可以不写版本,但是如果父工程中没有该依赖,那么子模块必须写完整的gav(坐标)
登陆拦截器在使用登录拦截器时,可以再拦截检查后将用户数据存入ThreadLocal中(因为传入Controller中的处理器方法的参数只能被读取一次, 防止拦截请求参数检查后,接收不到参数而报错, 读取参数的流只能被使用一次 ...
数据库(mysql)
数据库
# 展示所有数据库show databases;# 展示创建数据库的一些详细操作 以及数据库的字符集 等其他信息 可以用来查看已经创建的数据库的一些详细信息show create database mysql;# 创建数据库时指定字符集create database db2 character set gbk;show create database db2;# 删除数据库 如果数据库存在drop database if exists db2;# 创建数据库 如果数据库不存在create database if not exists db2;# 修改数据库的字符集alter database db2 character set gb2312;# 查询正在使用的数据库select database();# 查看数据库中的所有表show tables;# 使用数据库(选择) use world;# 查看表的结构desc city;use my_db;# 创建表create table student( id int, name varchar(32), age int ...
数据库事务
数据库事务事务的基本要素 4大性质
原子性:事务开始后的所有操作,要么全部成功,要么全部失败回滚,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始之前的状态,所有操作就像没有发生一样.也就是说事务是一个不可分割的整体,就像化学中学过的原子,是事务构成的基本单位.
一致性:事务开始前和结束后,数据库的完整性约束没有被破坏,如A向B转张,不可能出现A扣了钱而B却没有加的情况
隔离性:同一时间,只允许一个事务请求同一数据,不同事务之间彼此没有任何干扰,如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账.
持久性:事务完成之后,事务对数据库更新将会被保存写在数据库上,不能回滚.
隔离级别 隔离级别定义了一个事务可能受其他并发事务影响的程度。
脏读(Dirty reads)—— 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
不可重复读(Nonrepeatable read)—— 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
幻读(Phantom ...
每日一记--synchronized关键字
每日一记–synchronized关键字synchronized关键字(隐式的获取和释放锁)作用于静态方法:
对象锁给对象加锁(可以理解为这个对象的内存上锁,注意:只是这块内存,其他同类对象都会有各自的内存锁)这时候在其他一个以上线程中执行该对象的这个同步方法(注意:是该对象)就会产生互斥)
作用于静态方法:
类锁:相当于在类上枷锁(*.class位于代码区,静态方法位于静态区域,这个类产生的对象公用这个静态方法,所以这块内存,N个对象来竞争),这时候,只要是这个类产生的对象,在调用这个静态方法时都会产生互斥
对象锁与类锁区别:主要就在于内存区域不同 对象锁只作用与同类的单个对象的内存区域 类锁则作用于同类的所有对象的内存区域
Java线程内存模型:每个线程都用拥有自己的栈、堆内存共享、如下图所示。锁是线程间内存和信息沟通的载体。
Java中为了保证每个线程中的原子操作,引入了内置锁或者称监视器锁,其中,每个Java对象都可以作为实现锁的对象。
synchronized关键字修饰的代码块被称为同步代码块 ,线程进入同步代码块自动获取内置锁,退出同步代码块则释放锁,不需要调用者考虑 ...
每日一记
每日一记
栈简单应用之符号匹配关键:读括号时,如果时括号的左半部分(正常情况下,括号的左半部分总是先读到),如果遇到括号的右半部分,获取栈顶元素,如果匹配则弹出栈,如果不匹配依旧弹栈且哨兵flag记为FALSE,最后如果flag为TRUE且栈不为空或是flag为FALSE且栈为空则符号不匹配,如果栈为空且flag为TRUE则符号匹配。
代码
package DEVIL.泛型与集合框架.堆栈;import java.util.Scanner;import java.util.Stack;/** * @auther Devil(丁杨维) * @create 2021-10-12-18:41 *//*栈应用之符号匹配 */public class E_04 { public static void main(String[] args){ //先创建一个栈的对象 Stack<Character> stack = new Stack<>(); Scanner sc = new Scanner(Sys ...
每日一记--多线程(续)
每日一记–多线程(续)
今天看了看书 更了解了多线程。
Java中的线程程序:程序是一段静态的代码,他是应用软件执行的蓝本。
进程:进程是程序的一次动态执行过程,它对应了从代码加载、执行至完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。
线程:线程是比进程更小的执行单位。线程之间可以共享相同的内存单元(即内存中的堆区 包括代码和数据)并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。
进程与线程的关系:一个进程在其执行的过程中可以产生多个线程,形成多条执行线索,每条线索,即没有线程都有它自身的产生、存在与消亡的过程,也是一个动态的概念。
多线程原理:我们知道,操作系统分时管理各个进程,按时间片轮流执行每个进程。Java的多线程就是在操作系统每次分时给Java程序一个时间片的cpu时间内,在若干个独立的可控制的线程之间进行切换。如果机器能有多个cpu处理器,那么JVM就能充分利用这些cpu,使得Java程序在同一时刻能获得多个时间片,Java程序就可以获得真实的线程并发执行效果。
主线程:每个Java程序都有一个默认的主线程,这个线程就是当执行主类main方法 ...
Dubbo
DUBBORPC框架什么是RPCRPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。
比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
那么我们至少从这样的描述中挖掘出几个要点:
RPC是协议:既然是协议就只是一套规范,那么就需要有人遵循这套规范来进行实现。目前典型的RPC实现包括:Dubbo、Thrift、GRPC、Hetty等。
网络协议和网络IO模型对其透明:既然RPC的客户端认为自己是在调用本地对象。那么传输层使用的是TCP/UDP还是HTTP协议,又或者是一些其他的网络协议它就不需要关心了。
信息格式对其透明:我们知道在本地应用程序中,对于某个对象的调用需要传递一些参数,并且会返回一个调用结果。至于被调用的对象内部是如何使用这些参数,并计算出处理结果的,调用方是不需要关心的。那么对于远程调用来说,这些参数会以某种信息格式传递给网络上的另外一台计算机,这个信息格式是怎样 ...
RocketMQ
RocketMQMQ(Message Queue):消息队列
基本概念消息模型(Message Model):RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成。
消息生产者(Producer):负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
消息消费者(Consumer):负责消费消息,一般是后台系统负责异步消费。一个消息消 ...
SpringBoot
SpringBoot介绍
SpringBoot 相当于是一个Spring 和 SpringMVC的集成 又在其上增加了其他功能 对其他主流框架的支持也是非常好, 所以SpringBoot更新的非常频繁,需要时常关注它更新的内容
微服务架构 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapidapplication development)成为领导者。
SpringBoot优点
Create stand-alone Spring applications
创建独立Spring应用
Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
内嵌web服务器
Provide opinionated ‘starter’ dependenci ...