原文链接 作者:Jakob
Jenkov 译者:申章 校对:丁一
java中的锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字(译者注:这说的是Java
5之前的情况)。
自J...
分类:
编程语言 时间:
2015-05-14 12:07:41
阅读次数:
179
原文链接
作者:Jakob Jenkov
译者:余绍亮 校对:丁一
嵌套管程锁死类似于死锁,
下面是一个嵌套管程锁死的场景
线程1获得A对象的锁。
线程1获得对象B的锁(同时持有对象A的锁)。
线程1决定等待另一个线程的信号再继续。
线程1调用B.wait(),从而释放了B对象上的锁,但仍然持有对象A的锁。
...
分类:
编程语言 时间:
2015-05-14 10:03:06
阅读次数:
189
原文链接
作者:Jakob Jenkov
译者:申章
校对:丁一
在java中有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:
加锁顺序
当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。
如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子:
Thread 1: lock A ...
分类:
编程语言 时间:
2015-05-13 22:03:03
阅读次数:
187
原文链接 作者:Jakob Jenkov译者:申章 校对:丁一在java中有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:加锁顺序当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子:T....
分类:
编程语言 时间:
2015-05-13 21:17:06
阅读次数:
179
原文链接 作者:Jakob
Jenkov 译者:申章 校对:丁一
java中死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。
例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了...
分类:
编程语言 时间:
2015-05-13 19:50:04
阅读次数:
150
原文地址 2014年3月18日,Java SE 8 发布,而 Java 9 预期2016年发布; 2009年12月,Java EE 6发布; 2004年9月,J2SE 1.5发布; 2000年5月,JDK1.3、JDK1.4 相继发布; 1996年1月,JDK1.0发布; 1995年5月23日,Ja...
分类:
编程语言 时间:
2015-05-13 19:13:39
阅读次数:
256
原文链接 作者:Jakob
Jenkov
译者:杜建雄 校对:方腾飞
java中线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。
例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。
1、通过共享对象通信
java学习中线程间发送信号的一个简单方式是在共享对象的变量里设置信号值。线程A在一个同步块...
分类:
编程语言 时间:
2015-05-13 14:47:14
阅读次数:
155
原文链接 作者:Jakob
Jenkov 译者:李同杰Java 同步块(synchronized
block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:
Java同步关键字(synchronzied)
实例方法同步
静态方法同步
实例方法中同步块
静态方法中同步块
Java同步示例
Java 同步关键字(synchron...
分类:
编程语言 时间:
2015-05-13 14:47:11
阅读次数:
269
原文链接
作者:Jakob Jenkov 译者:高嵩 校对:丁一
在java中当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。
我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全。如下示例:
public class ImmutableValue{
...
分类:
编程语言 时间:
2015-05-13 10:13:51
阅读次数:
115
原文链接 作者:Jakob Jenkov 译者:毕冉 校对:丁一
java学习中,允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。
局部变量
局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全...
分类:
编程语言 时间:
2015-05-12 17:20:53
阅读次数:
202