1、高级同步机制 使用synchronized关键词的问题在于加锁范围是固定的,无法把锁在对象之间进行传递,使用起来不灵活,但是也不容易出错。 (1)tryLock (2)ReadWriteLock (3)ReentrantLock 2、底层同步器 3、...
分类:
编程语言 时间:
2014-08-05 09:44:59
阅读次数:
246
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁);如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。取到锁后,他就开始执行同步代码(被synchronized...
分类:
编程语言 时间:
2014-08-05 00:00:48
阅读次数:
448
1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。2)在Java中Lock接口比synchronized块的优势是什么?...
分类:
编程语言 时间:
2014-08-04 13:57:07
阅读次数:
227
在编码的过程中,有时候我们不得不借助锁同步来保证线程安全。synchronized关键字在上一篇博客中已经介绍;自从JDK5开始,添加了另一种锁机制:ReentrantLock。
二者的区别
1、lock是jdk5之后代码层面实现的,synchronized是JVM层面实现的。
2、synchronized在出现异常的时候能够自动释放锁,而lock必须在finally块中unlock()主动...
分类:
编程语言 时间:
2014-08-01 00:02:20
阅读次数:
319
Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了
实现代码线程的安全性。Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized
块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。...
分类:
编程语言 时间:
2014-08-01 00:02:10
阅读次数:
237
在多线程程序运行过程中,可能会涉及到两个或者多个线程试图同时访问同一个资源。为了防止这种情况的发生,必须在线程使用共享资源时给资源“上锁”,以阻挡其它线程的访问。而这种机制也常常被称为互斥量,本文主要介绍它的两种方式synchronized和Lock 。
1、synchronized
当任务要执行被synchronized关键字保护的代码片段的时候,它会检查锁是否可用,然后获取锁,执行代码,释...
分类:
编程语言 时间:
2014-07-31 17:11:30
阅读次数:
235
线程间的通信:其实就是多个线程再操作同一个资源,但是操作的动作不同当某个线程进入synchronized块后,共享数据的状态不一定满足该线程的需要,需要其他线程改变共享数据的状态后才能运行,而由于当时线程对共享资源时独占的,它必须解除对共享资源的锁定的状态,通知其他线程可以使用该共享资源。Java中...
分类:
编程语言 时间:
2014-07-31 16:40:16
阅读次数:
181
1、继承Thread和实现Runnable的不同 先看下Thread类 start方法的源码 public synchronized void start() { if (started) throw new IllegalThreadStateExcepti...
分类:
编程语言 时间:
2014-07-31 15:53:56
阅读次数:
284
什么是可重入锁,不可重入锁呢?"重入"字面意思已经很明显了,就是可以重新进入。可重入锁,就是说一个线程在
获取某个锁后,还可以继续获取该锁,即允许一个线程多次获取同一个锁。比如synchronized内置锁就是可重入的
,如果A类有2个synchornized方法method1和method2,那么method1调用method2是允许的。显然重入锁给编程带
来了极大的方便。假如内置锁不是可...
分类:
其他好文 时间:
2014-07-31 09:53:26
阅读次数:
301
关于synchronized关键字的作用:
1、在某个对象的所有synchronized方法中,在某一时刻,只能有一个唯一的一个线程去访问这些synchronized方法
2、如果一个方法是synchronized方法,那么该synchronized关键字表示给当前对象(this)上锁。
3、如果一个synchronized方法是静态(static)的,那么该synchronized关键字表示给当前对象所对应的class对象上锁。(每个类,不管生成多少对象,其对应的class对象只有一个)
4、多线程:如...
分类:
编程语言 时间:
2014-07-31 07:28:45
阅读次数:
236