相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑,i++ 居然还有线程安全问题?只能说自己了解的不够多,自己的水平有限。 先来看下面的示例来验证下 i++ 到底是不是线程安全的。 1000个线程,每个线程对共享变量 count 进行 1000 ...
分类:
编程语言 时间:
2019-03-20 01:08:43
阅读次数:
137
Java代码在编译后会变成Java字节码,字节码被类加载起加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一、volatile的应用 在多处理器开发中保证共享变量的 "可见性", 可见性的意思是: 当一个线程修改 ...
分类:
编程语言 时间:
2019-03-19 01:34:40
阅读次数:
239
Java的内存模型 Java内存模型(JMM)是一个抽象的模型。决定了线程主要定义了线程和内存间的抽象关系:主内存存放的是线程共享变量,每个线程有自己的工作内存,存放变量的副本,只能对副本进行读写,副本的变量再刷新到主内存中。具体体现为多核CPU,每核有一个高速缓存,每个核的线程对高速缓存读写,并且 ...
分类:
移动开发 时间:
2019-03-18 01:04:29
阅读次数:
253
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.ThreadLocalMap以当前ThreadLocal为key进行存储,设置一次变量,则其他线程也会有 ...
分类:
其他好文 时间:
2019-02-25 00:28:34
阅读次数:
157
Volatile实现原则 有volatile变量修饰的共享变量进行写操作的时候,会多出一行以Lock为前缀的汇编代码, 这个前缀指令会在多核处理器下引发两件事情: 1.将当前处理器缓存行的数据写回到系统内存。 2.这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。 概括性解释 为了提高 ...
分类:
其他好文 时间:
2019-02-24 17:28:14
阅读次数:
201
1.通信就是指相互交换一些数据或者发送一些控制指令,比如一个线程给另一个暂停执行的线程发送一个恢复执行的指令。 可变共享变量是天然的通信媒介,也就是说一个线程如果想和另一个线程通信的话,可以修改某个在多线程间共享的变量,另一个线程通过读取这个共享变量来获取通信的内容。 2.这里边就不得不提wait/ ...
分类:
编程语言 时间:
2019-02-22 00:32:07
阅读次数:
320
1.尽量将共享变量(共享变量指的是在堆内存上创建的对象或者数组,包括成员变量、静态变量和数组元素。)定义为局部变量。 2.如果多线程只是读取变量,可以定义全局final。 3.使用ThreadLocal将变量创建为线程私有。 4.加锁 锁的重入指的是:当一个线程请求获得已经被其他线程获得的锁的时候, ...
分类:
编程语言 时间:
2019-02-21 00:33:22
阅读次数:
161
本文介绍的Perl进程间数据共享内容主体来自于《Pro Perl》的第21章。 IPC简介 通过fork创建多个子进程时,进程间的数据共享是个大问题,要么建立一个进程间通信的通道,要么找到一个两进程都引用的共享变量。本文将介绍Unix IPC的近亲System V IPC:message queue ...
分类:
系统相关 时间:
2019-02-20 00:43:02
阅读次数:
544
记录一下用Labview 2016生成OPC DA变量的过程。 1. 新建Labview项目 2.打开vi前面板,放置若干控件 3.窗口-显示程序框图 4.数值输入控件连接显示控件 5.库.lvlib右键-新建-变量 6.变量类型-网络发布 7.网络-单个写入 8.程序框图中放置共享变量 9.选择变 ...
分类:
其他好文 时间:
2019-02-17 11:02:41
阅读次数:
361
在多线程编程中我们需要同时关注可见性、顺序性和原子性。 可见性。对于共享数据,一个地方如果改变了该数据,其它地方要立马知道。 原子性。类似于数据库事务的原子性,一次操作要全部执行,要么全部不执行。 顺序性。程序在执行的时候,程序的代码执行顺序和语句的顺序是一致的。 一、保证原子性 使用锁 使用同步 ...
分类:
编程语言 时间:
2019-02-07 18:59:59
阅读次数:
149