JDK1.5之后有提供了另一种加锁方式Lock锁。Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition 对象。
锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁。不过,某些锁可能允许对共享资源并发访问,如ReadWriteLock 的读取锁。
synchronized 方法或语句的使用提供了对与每...
分类:
编程语言 时间:
2014-11-09 01:08:16
阅读次数:
305
参考http://www.cnblogs.com/yyyyy5101/archive/2011/07/20/2112157.htmlhttp://www.cnblogs.com/kkcheng/archive/2011/02/25/1964521.htmlhttp://my.oschina.net/...
分类:
编程语言 时间:
2014-11-04 16:50:23
阅读次数:
288
一. Lock实现线程同步通信
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也是一个对象。
两个线程执行的代码片段要实现同步互斥的效果,他们必须用同一个Lock对象。锁是上在代表要操作的资源的类的内部方法中,
而不是线程代码中。...
分类:
编程语言 时间:
2014-10-29 00:16:37
阅读次数:
275
1、对象传递
在JAVA的参数传递中,有两种类型,第一种是基本类型传递,例如int,float,double等,这种是值传递,另外一种是对象传递,比如String或者自定义的类,这种是引用传递。
也就是说,基本类型传递的是一个副本,而对象传递的是对象本身。
2、锁
JAVA中,对象锁的概念,就是对对象进行加锁,每个对象都会有一个内存锁,如果加上锁以后,就只能让一个线程进行操作,在操...
分类:
编程语言 时间:
2014-10-20 23:30:04
阅读次数:
271
一. 线程通信:
在同步方法中,线程之间的通信主要依靠以下三个方法来实现:
1. wait() 调用该方法会使当前线程暂停执行并释放对象锁,让其他线程可以进入Synchronized代码块,当前线程放入对象等待池中。
2. notify() 调用该方法会从对象等待池中移走任意一个线程
3. notifyAll() 调用该方法会从对象等待池中移走所有等待的线程。...
分类:
编程语言 时间:
2014-10-20 23:24:35
阅读次数:
254
synchronized与lock 都是用来实现线程同步的锁,synchronized对象锁,lock是一个接口,她的实现有reentrantlock互斥锁以及ReentrantReadWriteLock共享锁。这里说明一下ReentrantReadWriteLock共享锁,所谓共享就是该锁提供读读...
分类:
其他好文 时间:
2014-10-10 19:16:04
阅读次数:
211
Monitor 类通过向单个线程授予对象锁来控制对对象的访问。 对象锁提供限制访问代码块(通常称为临界区)的能力。 当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。 还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定...
分类:
其他好文 时间:
2014-09-30 16:09:49
阅读次数:
193
标题起得有些奇怪,好端端的为什么要替换wait和notify?在论坛看到了这么一段:>14.为什么wait(),notify()和notifyAll()必须在同步方法或者同步块中被调用?当一个线程需要调用对象的wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态..
分类:
其他好文 时间:
2014-09-14 02:35:57
阅读次数:
464
对象①锁:每条SQL语句②隔离:事务锁①并发问题丢失更新未确认的读取(脏读)不一致的分析(非重复读):多次读取相同的数据(行)不一致(其他用户更改update)幻像读:多次读取有不存在和新增的数据(其他用户插入insert或删除delete)隔离级别隔离级别脏读不可重复读取幻像说明未提交读(read...
分类:
数据库 时间:
2014-09-07 22:20:55
阅读次数:
376
多线程的同步依靠的是对象锁机制,synchronized关键字的背后就是利用了封锁来实现对共享资源的互斥访问。下面以一个简单的实例来进行对比分析。实例要完成的工作非常简单,就是创建10个线程,每个线程都打印从0到99这100个数字,我们希望线程之间不会出现交叉乱序打印,而是顺序地打印。先来看第一段代...
分类:
编程语言 时间:
2014-09-01 17:35:53
阅读次数:
305