可重入函数主要用于多任务环境中,简单来说就是可以被中断的函数,即在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,返回控制时不会出现什么错误;也意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是 purecode(纯代码)可重入,可以允许有该函数的 ...
分类:
其他好文 时间:
2016-08-01 10:27:30
阅读次数:
190
ConcurrentHashMap是有Segment数组结构和HashEntry数组结构组成。 Segment是一种可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色; HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个S ...
分类:
其他好文 时间:
2016-07-30 00:16:37
阅读次数:
228
一、线程安全如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程..
分类:
编程语言 时间:
2016-07-24 21:10:37
阅读次数:
267
线程安全: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和 运行的结果是一样的,而且其他的变量的值也和预期的是一样 的, 就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二 ...
分类:
编程语言 时间:
2016-07-21 00:49:55
阅读次数:
255
当两条线程同时访问一个类的时候,可能会带来一些问题。并发线程重入可能会带来内存泄漏、程序不可控等等。不管是线程间的通讯还是线程共享数据都需要使用Java的锁机制控制并发代码产生的问题。本篇总结主要著名Java的锁机制,阐述多线程下如何使用锁机制进行并发线程沟通。 1、并发下的程序异常 先看下下面两个 ...
分类:
编程语言 时间:
2016-07-20 19:34:34
阅读次数:
192
线程安全:多个线程访问同一个区域的时候其最终结果是可预期的,并不会因为产生冲突或者异常中断再次恢复而使结果不可预期1.重入:函数被不同的控制流程调用,有可能在第一次调用还没有返回的时候就再次进入该函数这称之为重入;2.不可重入函数:当访问一个全局的变量或者参数..
分类:
编程语言 时间:
2016-07-19 19:05:13
阅读次数:
176
线程安全函数概念:线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。确保线程安全:要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区..
分类:
编程语言 时间:
2016-07-19 11:29:39
阅读次数:
189
摘要:本文主要讲了读写锁。一、读写锁ReadWriteLock 在上文中回顾了并发包中的可重入锁ReentrantLock,并且也分析了它的源码。从中我们知道它是一个单一锁(笔者自创概念),意思是在多人读、多人写、或同时有人读和写时。只能有一个人能拿到锁,执行代码。但是在很多场景。我们想控制它能多人同时读,但是又不让它多人写或同时读和写时。(想想这是不是和数据库的可重复读有点类型?),...
分类:
编程语言 时间:
2016-07-19 10:32:20
阅读次数:
183
线程安全 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成: 1. 在 Items[Size] 的位置存放此元素; 2. 增大 Size 的值。 在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;而如果是在多线程情况下,比 ...
分类:
编程语言 时间:
2016-07-19 09:29:15
阅读次数:
195
概念 重入:即重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。 可重入:当程序被多个线程反复执行,产生的结果正确。 如果一个函数只访问自己的局部变量或参数,称为可重入函数。 不可重入:当程序被多个线程反复调用,产生的结果出错。 当函数访问一个全局的变量或 ...
分类:
编程语言 时间:
2016-07-18 02:43:08
阅读次数:
167