Java内存模型(JMM)与线程安全 1:JMM其实是java虚拟机栈的一部分 2:主内存和工作内存:都属于Java虚拟机内存 主内存:主要对应于JVM内存区域中的堆内存中的对象实例数据部分 工作内存:主要对应于JVM内存区域中的虚拟机栈中的部分区域 主内存与工作内存的数据交换操作的过程(通过总线b ...
分类:
编程语言 时间:
2020-03-21 16:35:32
阅读次数:
69
玩转多线程 目录: 创建多线程的三种方式 extends Thread implements Runnable 匿名类 线程创建方式 有关构造函数中使用匿名类的说明 多线程的核心理论 共享性 互斥性 原子性 可见性 有序性 synchronized 使用方法 内核剖析 volatile 使用方法 使 ...
分类:
编程语言 时间:
2020-03-21 14:45:12
阅读次数:
49
1.synchronized概述: synchronized修饰的方法或代码块相当于并发中的临界区,即在同一时刻jvm只允许一个线程进入执行。synchronized是通过锁机制实现同一时刻只允许一个线程来访问共享资源的。另外synchronized锁机制还可以保证线程并发运行的原子性,有序性,可见 ...
分类:
其他好文 时间:
2020-03-18 18:37:57
阅读次数:
41
Java内存模型(java memory model)本身是一种抽象概念,是一种符合内存模型规范的,屏蔽了硬件和操作系统之间访问差异的,保证java程序在各种平台下对内存的访问都能达到一致性访问效果的规范及机制。目的是解决多线程通过共享内存进行通信时,存在的原子性,有序性,可见性问题。除此之外,ja ...
分类:
编程语言 时间:
2020-03-16 12:38:29
阅读次数:
71
本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。 函数接口定义: List Insert( List L, ElementType X ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Nod ...
分类:
其他好文 时间:
2020-03-09 00:50:50
阅读次数:
62
上一节我和大家一起打到了并发中的恶霸 "可见性" 和 "原子性" ,这一节我们继续讨伐三恶之一的有序性。 序、有序性的阐述 有序性为什么要探讨?因为Java是面向对象编程的,关注的只是最终结果,很少去研究其具体执行过程?正如上一篇文章在介绍可见性时描述的一样,操作系统为了提升性能,将Java语言转换 ...
分类:
其他好文 时间:
2020-03-04 09:50:50
阅读次数:
101
为了进一步提升计算机各方面能力,在硬件层面做了很多优化,如处理器优化和指令重排等,但是这些技术的引入就会导致有序性问题。 先告诉面试官你知道什么是有序性问题,也知道是什么原因导致的有序性问题 我们也知道,最好的解决有序性问题的办法,就是禁止处理器优化和指令重排,就像volatile中使用内存屏障一样 ...
分类:
其他好文 时间:
2020-03-03 11:01:03
阅读次数:
280
缓存: 1、如何做到高可用? 2、持久化:RDB和AOF RDB的save和bgsave 3、缓存穿透 4、大key 5、整点密集推送方案 6、分布式锁 kafka: 1、kafka是如何保证消息的有序性? ...
分类:
其他好文 时间:
2020-03-02 10:40:38
阅读次数:
42
Volatile关键字的作用? 让其他线程能够马上感知到某一线程对某个变量的修改。 1)保证可见性,对共享变量的修改,其他线程马上能感知到,但不能保证原子性。 2)保证有序性,在JVM的编译阶段和指令优化排序阶段,对于volatile修饰的变量,其代码顺序不会改变。 Volatile和Synchro ...
分类:
其他好文 时间:
2020-02-27 00:50:12
阅读次数:
60
多线程的三大特性 原子性: 是指一个操作是不可中断的。即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 比如,对于一个静态全局变量int i,两个线程同时对它赋值,线程A给他赋值为1,线程B给他赋值为-1。那么不管这两个线程 以何种方式。何种步调工作,i的值要么是1,要么是-1 ...
分类:
编程语言 时间:
2020-02-17 12:18:38
阅读次数:
103