Java基础Java学习笔记

多线程笔记

2017-01-06  本文已影响39人  心扬Q
什么是线程安全

当多个线程在访问某一个类(对象或方法)时,这个类都能表现出正确的行为,那么这个类就是线程安全的。

什么是对象锁和类锁

当对象的方法使用synchronized修饰的时候,是对象锁,不同的对象可以同时调用此方法
当类的synchronized方法使用static是类锁,同一时间只能被一个线程调用。

多线程的脏读是如何产生的

当一个对象的set方法未执行完成时,对象的get方法执行,读到错误的数据。解决方法是对get的set方法都加上synchronied修饰

synchronized拥有锁重入的功能如何理解

当一个线程得到对象的锁之后,再次请求此对象可以再次得到锁。
如对象有两个同步方法A,B,A调B也是可以的。
如果父类和子类的方法都实现了同步,子类也可以调用父类的方法。

notify和wait有何不同

notify用于唤醒线程,不释放锁
wait使线程进入阻塞状态,释放锁

如何实现实时的通知

CountDownLatch
AtomicInteger
AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
ThreadLocal

BlockingQueue 都有哪些方法

header 1 header 2 3
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞

remove、element、offer 、poll、peek 其实是属于Queue接口。

上一篇 下一篇

猜你喜欢

热点阅读