前言: 前面我们分析了多线程在编程的过程中为什么会出现线程安全问题,就是多个线程在读写数据时,工作内存和主内存的数据从在不一致,那么要想解决这一问题,那么解决这些问题就会涉及到多线程编写的三个特性:原子性、有序性、可见性,下面我们来具体看一下多线程的这三个特性。 一、原子性: 多线程中的原子性,即一 ...
分类:
编程语言 时间:
2019-09-13 15:43:18
阅读次数:
79
JS 监听浏览器标签页显示隐藏 API document.hidden 判断页面是否隐藏的布尔值。页面隐藏包括 或者 document.visibilityState (只读属性), 返回document的可见性,4个值: hidden:文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 ...
分类:
Web程序 时间:
2019-09-12 18:03:23
阅读次数:
256
并发编程三要素 1. 原子性: 一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。 2. 有序性: 程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序) 3. 可见性: 一个县城对共享变量的修改,另一个线程能够立刻看到。 一、原子性 线程切换会带来 ...
分类:
其他好文 时间:
2019-09-12 16:47:11
阅读次数:
86
什么是AOP? 与OOP对比,AOP是处理一些横切行问题。这些横切性问题不会影响到主逻辑的实现,但是会散落到代码的各个部分,难以维护。AOP就是把这些问题和主业务逻辑分开,达到与主业务逻辑解耦的目的。 传统OOP是自上而下的逻辑开发; OOP: AOP是一种面向切面的编程思想。这些横切性问题,把它们 ...
分类:
编程语言 时间:
2019-09-11 10:05:14
阅读次数:
84
并发的特性1、可见性a、保证任何一个线程修改变量立即写入到主内存中(堆);b、所有线程对该变量引用会强制立即失效,并且该线程必须去堆中获取最新的变量值。2、指令重排序代码的执行顺序会在JVM中(编译器优化指令级并行重排序内存系统重排序最终执行的指令序列)3、原子性同一时刻最多只有一个线程访问该段代码。Volatile->可见性、指令重排序Synchronied->可见性、指令重排序、原
分类:
编程语言 时间:
2019-09-10 00:20:04
阅读次数:
84
一、volatile的作用 在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有 ...
分类:
编程语言 时间:
2019-09-09 11:39:04
阅读次数:
115
机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM,GBDT,Adaboost,现在深度学习很火热,神经网络也是一个不错的选择。 假如你在乎精度(a ...
分类:
编程语言 时间:
2019-09-08 09:33:58
阅读次数:
219
从JDK5开始,Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系,这两个操作可以是在一个线程之内,也可以是在不同 ...
分类:
移动开发 时间:
2019-09-03 16:53:27
阅读次数:
96
前言 当共享变量被声明为volatile后,对这个变量的读/写操作都会很特别,下面我们就揭开volatile的神秘面纱。 1.volatile的内存语义 1.1 volatile的特性 一个volatile变量自身具有以下三个特性: 1. 可见性:即当一个线程修改了声明为volatile变量的值,新 ...
分类:
其他好文 时间:
2019-09-03 00:00:51
阅读次数:
102
在原子性、可见性、有序性中,volatile关键字主要在可见性中发挥作用。 volatile声明的变量对所有线程来说是可见的,就是说当变量的值发生改变的时候,其他线程可以立马发现这个变化。 应该是由于编译器优化的存在,这里变量虽然没有被volatile修饰,但是仍然对其他线程可见。。。。。 当一个变 ...
分类:
编程语言 时间:
2019-09-01 13:02:36
阅读次数:
123