条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象上调用newCondition()方法来获取的,这样,条件就和一个锁对象绑定起来了。因此,Java中的条件变量只能和锁配合使用,来控制并发程序访问竞争资源的安全。条件变 ...
分类:
编程语言 时间:
2016-09-02 15:50:38
阅读次数:
247
在锁对象期间,会产生一个问题就是死锁,双方都在等在对方释放资源 范例: public class Test { public static void main(String[] args) throws Exception { MyThread mt1 = new MyThread(); MyThr... ...
分类:
编程语言 时间:
2016-08-28 01:14:13
阅读次数:
214
一:锁的原理结构 (1)锁对象内部维护了一个同步管理器的对象AbstractQueuedSynchronizer,AbstractOwnableSynchronizer (2)该对象其实是一个抽象类,具体的锁的管理器继承该抽象类 (3)该抽象类的关键属性有: >Thread exclusiveOwn ...
分类:
编程语言 时间:
2016-08-24 17:13:54
阅读次数:
199
问题1: 为什么wait() 和 notify()是Object类中的方法,而不是Thread类中的方法呢? 答:因为锁是任意对象的所以要在Object类中,如果在Thread类中锁对象不是任意的了。 问题2: 为什么wait() 和 notify()必须在同步代码快中或同步函数中使用呢? 答:因为 ...
分类:
编程语言 时间:
2016-08-18 23:24:27
阅读次数:
169
1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。 2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他同步方法。 3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Class对象。 ...
分类:
编程语言 时间:
2016-08-03 14:48:09
阅读次数:
126
共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。共享锁是造成上锁对象必须被大家共享,它排斥 排他锁,因此别的会话不能独占资源对其修改 ...
分类:
其他好文 时间:
2016-07-23 16:37:03
阅读次数:
137
2016-07-02 1 同步问题Java的解决方案 同步方法:当线程进入同步方法的时候,会获得同步方法所属对象的锁, 一旦获得对象锁,则其他线程不能再执行被锁对象的其他任何同步方法。 只有在同步方法执行完毕之后释放了锁,其他线程才能继续执行。 synchronized 方法声明{ } 同步块: s ...
分类:
编程语言 时间:
2016-07-02 16:05:31
阅读次数:
269
死锁问题:死锁的解决:
1.算法;
2.避免同时使用多个锁;死锁如何形成的:
有多个锁的时候,同步时会出现死锁线程的通讯:— 在同步时执行
在同步的情况下,线程之间可以互相通信,释放和获得锁对象。(在同步代码块内)
wait() —- 释放所有的锁资源(挂起状态)
notify() —- 唤醒 挂起的线程(通知最近一个被挂起的线...
分类:
其他好文 时间:
2016-05-30 15:02:28
阅读次数:
165
加强篇
1、线程互斥锁
a、多线程互斥共享“基本数据类型数据”资源,锁(用synchronized关键字)的必须是对象,基本数据类型的变量不能当作对象锁,同时,要保证多线程使用的是同一个互斥锁(对象锁),才能进行同步。
b、多线程互斥共享“栈”资源
举例:多窗口买票
package thread.ticket.v1;
public class Selli...
分类:
编程语言 时间:
2016-05-27 12:26:07
阅读次数:
167
InterProcessMutex 类详解步骤:获取锁的过程步骤: 1.acquire方法,根据当前线程获取锁对象,判断当前的线程是否已经获取锁,此处则代表可重入;2.获取锁方法,String lockPath = internals.attemptLock(time, unit, getLockN ...
分类:
其他好文 时间:
2016-05-13 11:18:19
阅读次数:
284