在《 "Java内存模型(JMM)详解" 》一文中我们已经讲到了Java内存模型的基本结构以及相关操作和规则。而Java内存模型又是围绕着在并发过程中如何处理原子性、可见性以及有序性这三个特征来构建的。本篇文章就带大家了解一下相关概念、原则等内容。 原子性 原子性即一个操作或一系列是不可中断的。即使 ...
分类:
编程语言 时间:
2019-11-06 13:50:42
阅读次数:
88
一、共享性 多个线程共享同一块内存,会引起线程安全问题。 例如变量A同时被Thread1和Thread2访问,可能发生Thread1和Thread2读取的变量A不是同一个值,大多数情况下Thread1和Thread2不会恰好同一个时间读取变量A,而变量A在这段时间差中可能已被修改。 二、互斥性 对同 ...
分类:
编程语言 时间:
2019-11-06 10:29:41
阅读次数:
83
一、happns-before happns-before是学习指令重排序前的一个必须了解的知识点,他的作用主要是就是用来判断代码的执行顺序。 1.定义 happens-before是用来指定两个操作之间的执行顺序。提供跨线程的内存可见性。 在java内存模型中,如果一个操作执行的结果需要对另一个操 ...
分类:
编程语言 时间:
2019-11-02 15:43:40
阅读次数:
73
jQuery可以用可见性“:hidden”查找“display:none”的元素。 1、新家html文档,在head标签中引入本地jQuery文件,也可以引入cdn文件: 2、在body标签中添加一些列表,其中部分列表的样式设置为“display:none”: 3、添加js代码“$('li:hidd ...
分类:
Web程序 时间:
2019-10-31 10:37:08
阅读次数:
806
由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),工作内存是每个线程的私有数据区域,而Java内存 模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内 ...
分类:
编程语言 时间:
2019-10-30 18:38:06
阅读次数:
80
一、基本概念 1. 类 定义:类是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。 名称 格式 例子 说明 类名 字符串 Student 无 属性 [可见性]属 ...
分类:
其他好文 时间:
2019-10-29 20:01:14
阅读次数:
155
线程安全 多线程编程中的三个核心概念 1. 原子性:锁(lock)和同步(synchronized)、CAS(compare and swap) 2. 可见性:volatile(乐观锁) 3. 顺序性:happens before原则 参考 "当我们说线程安全时,到底在说什么" "一图带你了解jav ...
分类:
编程语言 时间:
2019-10-29 00:24:53
阅读次数:
98
一、作用 1. 多线程同步代码,保证方法或者代码块在运行时,同一时刻只有一个线程可以进入到临界区(互斥性) 2. 保证线程间共享变量的修改及时可见(可见性) a. 当线程获取锁时,线程的本地变量无效,需要从主存中获取共享变量的值 b. 线程释放锁时,线程的本地变量被刷新到主存中 3. 有效解决重排序 ...
分类:
其他好文 时间:
2019-10-27 15:09:02
阅读次数:
89
6.JavaScript作用域 作用域 概念 简单地说,作用域就是在上下文中,变量与函数的可访问范围。它可以分为 块级作用域 和 函数作用域 。 作用 作用域控制着变量与函数的可见性和生命周期。 作用域链 概念 作用域链可以理解为一组对象列表,包含父级和自身的变量对象,因此我们便能通过作用域链访问到 ...
分类:
编程语言 时间:
2019-10-27 12:37:19
阅读次数:
74
一、比较低级的办法是用wait和notify来解决这个问题。 消费者生产者问题: 这个问题是一个多线程同步问题的经典案例,生产者负责生产对象,消费者负责将生成者产生的对象取出,两者不断重复此过程。这过程需要注意几个问题: 不论生产者和消费者有几个,必须保证: 1.生产者每次产出的对象必须不一样,产生 ...
分类:
编程语言 时间:
2019-10-27 11:09:14
阅读次数:
90