准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.java.util.concurrent.atomic,正如它的英文意思一样,是一个线程安全、原子操作相 ...
分类:
编程语言 时间:
2016-10-28 15:37:12
阅读次数:
203
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。 程序描述: 主线程启动10个子线程并将表示子线程序 ...
分类:
编程语言 时间:
2016-10-20 21:35:59
阅读次数:
217
上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数 ...
分类:
其他好文 时间:
2016-10-20 21:16:52
阅读次数:
169
java.util.concurrent.atomic包里面有原子操作相关的类 一、基本的类为 1.AtomicInteger 2.AtomicLong 3.AtomicBoolean 4.AtomicReference 5.AtomicStampedReference 6.AtomicMarkab ...
分类:
编程语言 时间:
2016-10-20 15:07:28
阅读次数:
220
为了解释清楚这两个函数,首先必须要有清楚 目录项 和 inode节点 两个概念。目录文件中存放的是文件名和对应的inode号码,统称为目录项。link和unlink函数分别是用来创建硬链接和删除硬链接的。两个函数中的操作都是原子操作。 函数原型: 函数参数: oldpath:源文件路径名 newpa ...
分类:
其他好文 时间:
2016-10-01 14:44:14
阅读次数:
498
使用open打开文件时,使用 O_CREAT 标志的话,就会在不存在文件的情况下去创建文件。所以说实际应该是有两个操作,一个是判断文件是否存在,另一个就是创建文件;而且这两个操作是作为一个原子操作执行的。如果不是作为一个原子操作执行的,那么就会分解成如下的程序段: 如果不作为一个原子操作执行那么在多 ...
分类:
其他好文 时间:
2016-10-01 12:56:02
阅读次数:
183
原子操作是指在一个进程中不允许被其他进程打断的操作就是原子操作。 在“文件共享”笔记中提到了单进程和多进程之间的文件共享,当同时对共享的文件进行写操作的时候,由于各自有独立的当前文件偏移量,所以很可能会出现数据覆盖的问题,正如该笔记中举的例子一样。为了解决数据覆盖的这个问题,就需要每次写之前将当前文 ...
分类:
其他好文 时间:
2016-10-01 12:35:54
阅读次数:
182
1.问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。2.解决方案:将类A修改为依赖接口I,类B和类C各..
分类:
其他好文 时间:
2016-09-24 22:04:12
阅读次数:
156
事物: 事务管理是企业级应用程序开发中必不可少的技术, 用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完 ...
分类:
编程语言 时间:
2016-09-14 23:13:33
阅读次数:
306
1.使用特殊域变量(volatile)实现线程同步 a.volatile关键字为域变量的访问提供了一种免锁机制, b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, c.因此每次使用该域就要重新计算,而不是使用寄存器中的值 d.volatile不会提供任何原子操作,它也不能用来 ...
分类:
编程语言 时间:
2016-09-09 18:47:36
阅读次数:
210