对象锁 针对独享,它只是在该对象的某个内存位置声明一个标志该对象是否拥有锁,所以它只会锁住当前的对象 类锁 锁住整个类,当有多个线程来声明这个类的对象时将会被阻塞,直到拥有这个类锁的对象被销毁或者主动是否了类锁 公平锁 多个线程在等待同一个锁时,必须按照申请锁的时间来一次获得锁 非公平锁 多个线程获 ...
分类:
其他好文 时间:
2018-12-22 21:54:57
阅读次数:
170
加锁本身不会带来多少性能的损耗,性能的损耗主要在获取锁的过程。1.尽量不要锁住方法,因为在普通成员函数上加锁,线程获得的是该方法所在对象的对象锁;2.缩小同步代码块,尤其是一些循环操作、同步IO操作,并且不止是在代码行数上缩小同步块,在执行逻辑上也应该缩小,例如多增加一些条件判断,在符合条件的情况下 ...
分类:
其他好文 时间:
2018-12-17 22:01:19
阅读次数:
222
线程是我们学习Java知识中一个重要的难点,首先我们要明白两种创建线程的方法,其次在售票问题中我们要注意线程并发带来的线程安全问题。 最后我们要明白几个重要的概念: ①保证代码原子性:所谓代码原子性是指当a线程在执行某段代码块的时候,别的线程必须等待 ,直到a线程执行完才可以执行这段代码。 ②对象锁 ...
分类:
编程语言 时间:
2018-12-17 02:22:03
阅读次数:
184
重入锁,指同一个线程试图获取一个已经由它自己持有的锁的一种“现象”。 譬如有一个类: 假设现在创建两个线程,ThreadA和ThreadB,同时调用TestDemo对象里面的方法, 当ThreadA率先获得testDemo对象锁,进入doSomething1()方法,ThreadB想要执行doSom ...
分类:
其他好文 时间:
2018-12-05 14:26:54
阅读次数:
137
1.sleep是属于Thread类的 wait是属于Object类的2.sleep:在sleep()方法执行过程中线程 >不会释放对象锁 wait: 在wait()方法执行过程中线程 >释放对象锁 --》引用: 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法 ...
分类:
其他好文 时间:
2018-11-22 02:29:34
阅读次数:
177
在jdk7下慎用String.intern()作为synchronized的对象锁: https://www.cnblogs.com/yhlx/p/3498387.html String.intern()在jdk7的变化后,我们为了在单例类里并发时对同一个用户保证操作原子性,会加同步块,例如: 这个 ...
分类:
其他好文 时间:
2018-11-19 20:16:29
阅读次数:
202
sleep方法: 属于Thread类中的方法;会导致程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持着,当指定时间到了之后,又会自动恢复运行状态;在调用sleep方法的过程中,线程不会释放对象锁。 wait方法: 属于Object类中的方法;在调用wait方法的时候,线程会放弃 ...
分类:
编程语言 时间:
2018-11-15 01:42:17
阅读次数:
177
Java并发编程(8):多线程环境中安全使用集合API(含代码)JAVA大数据中高级架构2018-11-0914:44:47在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此
分类:
编程语言 时间:
2018-11-09 16:07:16
阅读次数:
163
集合存放的是对象的引用,不是基本数据类型,所以不可以放int啊等,可以放基本数据的包装类,比如Integer。 同步锁的方法: 1)写个同步代码块 syncronized(任意对象Obj){ 线程要操作的共享数据 } 2)在方法声明前加synchronized ,叫同步方法 ,对象锁是本类对象引用t ...
分类:
编程语言 时间:
2018-11-09 13:11:59
阅读次数:
153
sleep和wait都是线阻塞,但是sleep在阻塞时不会释放锁,是不允许别的线程继续使用这个对象,但是wait是会释放对象锁的,可以供别的线程使用该对象,唤醒方式,sleep时间到了醒来,或者interruput()方法-à异常回到就绪状态,wait则需要使用notify,notifyAll()唤 ...
分类:
其他好文 时间:
2018-11-05 17:32:39
阅读次数:
136