SynchronizedJava中每个对象都有一个内置锁,当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。当程序运行到synchronized同步方法或代码块时才该对象锁才起作用。
一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一...
分类:
编程语言 时间:
2015-04-30 20:11:06
阅读次数:
147
/** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20:44 */public class Test1 { /** * 对象锁...
分类:
编程语言 时间:
2015-04-20 16:34:06
阅读次数:
160
之前看过张孝闲讲线程中的一个实例,让主线程运行10次,然后子线程再运行20次,这样循环50次。今天自己闲着写了一下,刚写出的代码报了个java.lang.IllegalMonitorStateException的错误,网上查了一下,发现了问题是锁的问题,于是自己总结了一下。
先贴第一版的错误代码:
public class ThreadNotity {
/**...
分类:
编程语言 时间:
2015-04-18 01:15:49
阅读次数:
230
多线程的同步依靠的是对象锁机制,synchronized关键字的背后就是利用了封锁来实现对共享资源的互斥访问。下面以一个简单的实例来进行对比分析。实例要完成的工作非常简单,就是创建10个线程,每个线程都打印从0到99这100个数字,我们希望线程之间不会出现交叉乱序打印,而是顺序地打印。先来看第一段代...
分类:
编程语言 时间:
2015-04-17 21:49:03
阅读次数:
189
class Sync {
private byte[] lock = new byte[0];
public void sync() throws InterruptedException {
synchronized (lock) {
runThread();
}
}
public void thi...
分类:
编程语言 时间:
2015-04-09 15:35:31
阅读次数:
235
synchronized,wait,notify,notifyAll,类锁,对象锁...
分类:
编程语言 时间:
2015-04-08 23:29:23
阅读次数:
273
下面的这段程序模拟了一个小车间。程序首先启动了一个工人线程,该线程在停止时间到来之前会一直工作(至少是假装在工作),然后程序安排了一个定时器任务(timer task)用来模拟一个恶毒的老板,他会试图阻止停止时间的到来。最后,主线程作为一个善良的老板会告诉工人停止时间到了,并且等待工人停止工作。那么这个程序会打印什么呢?...
分类:
编程语言 时间:
2015-04-08 10:59:16
阅读次数:
147
Java的锁分为对象锁和类锁。 1. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内针对该对象的操作只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 2. 然而,另一个线程仍然可以访问该ob...
分类:
编程语言 时间:
2015-04-04 19:43:18
阅读次数:
172
线程同步
Java语言的优点之一就是他在语言级别上对多线程的支持。这些支持多集中在于同步(synchronization):多线程之间的协作活动和数据访问。Java所使用的支持同步的机制是监控器(monitor)。本章描述这些监控器以及他们如何被JVM使用。并且从JVM指令集描述监控器的加锁和解锁。
监控器(Monitors)
Java监控器支持两种类型的线程同步:互...
分类:
其他好文 时间:
2015-04-04 09:17:33
阅读次数:
197
今天上午,参加大摩的面试,自觉失败,记录一下过程。
面试官看着简历,并没有就简历提问,整个过程都在问java多线程的问题。
1. ReentrantLock,作为可重入锁,怎么理解“可重入”二字,有没有不可重复的锁?
我:获得对象锁的线程能够再次获得对象锁,访问对象……被鄙视了,后来想想,应该把递归这种场景说下;
2.生产者-消费者模型怎么实现?
我:使用synchronized或者Lo...
分类:
编程语言 时间:
2015-04-03 17:22:16
阅读次数:
246