在多线程并发编程中synchronized和volatile都是很重要的关键字,简单来说,synchronized保持和代码块中代码的同步下,valatile保证了共享变量的可见性。
volatile的定义与实现原理:
Java语言允许线程访问共享变量,为了确保共享变量能被准备和一致的更新,线程应该确保通过排它锁单独获得这个变量。java语言提供了volatile,我们可以把它当成一个轻量级的...
分类:
编程语言 时间:
2016-04-04 06:47:03
阅读次数:
209
第18章 调试 18.1 准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 18.2 内核中的bug 内核中bug的产生原因 从明白无误的错误代码——没有把正确的值存放在恰当的位置 同步时发生的错误——共享变量锁定不当 错误地管理硬件——错误的控制寄存器发 ...
分类:
系统相关 时间:
2016-03-29 00:51:48
阅读次数:
297
第十八章 调试 一、内核中的bug 内核bug的原因可能有: - 错误代码 - 同步时发生的错误,例如共享变量锁定不当 - 错误的管理硬件 - …… 内核bug发作的症状可能有: - 降低所有程序的运行性能 - 毁坏数据 - 使得系统处于死锁状态 - …… 内核开发比起用户开发要多考虑一些独特的问题 ...
分类:
其他好文 时间:
2016-03-28 02:09:51
阅读次数:
149
直接使用一个共享变量,来是两个线程之间进行切换是非常笨拙而且没有效率的;信号量--互斥量--这两者是相互通过对方来实现的;比如,如果想控制某一时刻只有一个线程可以访问一些共享内存,使用互斥量要自然一些; 但是控制一组相同的对下的访问时,比如同5条可用的电话线中分配1条给某个可用的线程,那么使用计数信 ...
分类:
系统相关 时间:
2016-03-27 10:55:33
阅读次数:
204
1.对象锁钥匙只能有一把才能互斥,才能保证共享变量的唯一性 2.在静态方法上的锁,和 实例方法上的锁,默认不是同样的,如果同步需要制定两把锁一样。 3.关于同一个类的方法上的锁,来自于调用该方法的对象,如果调用该方法的对象是相同的,那么锁必然相同,否则就不相同。比如 new A().x() 和 ne ...
分类:
其他好文 时间:
2016-03-24 01:18:57
阅读次数:
343
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开
分类:
编程语言 时间:
2016-03-21 17:53:38
阅读次数:
375
简介: 对于Python2而言,对于一个全局变量,你的函数里如果只使用到了它的值,而没有对其赋值(指a = XXX这种写法)的话,就不需要声明global。 相反,如果你对其赋了值的话,那么你就需要声明global。 声明global的话,就表示你是在向一个全局变量赋值,而不是在向一个局部变量赋值。
分类:
编程语言 时间:
2016-03-14 20:21:37
阅读次数:
518
一、多线程共享变量 方法一:以变量共享的方式进行操作 public class AddMinusOperate { private int j=5; public synchronized void add() { j++; } public synchronized minus() { j--;
分类:
编程语言 时间:
2016-03-11 22:26:45
阅读次数:
249
方法一 通过访问共享变量的方式(注:需要处理同步问题) 方法二 通过管道流 其中方法一有两种实现方法,即 方法一a)通过内部类实现线程的共享变量 public class Innersharethread { public static void main(String[] args) { Myth
分类:
编程语言 时间:
2016-03-10 23:11:31
阅读次数:
257
mysql中的latch锁和Tlock(事务锁),DML加锁规则,以及死锁分析。一.Latch和Tlock的关系Latch:为保护临界资源的正确性而设计,例如保护正在使用的内存页面不被破坏等。没有死锁检测机制,轻量锁,并且作用对象时内存页面或是内存共享变量.Tlock:事务锁,作用对象是事务,有死锁检测机..
分类:
数据库 时间:
2016-03-09 19:22:31
阅读次数:
452