多线程笔记

作者: 心扬Q | 来源:发表于2017-01-06 13:26 被阅读39次
什么是线程安全

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

什么是对象锁和类锁

当对象的方法使用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接口。

相关文章

网友评论

    本文标题:多线程笔记

    本文链接:https://www.haomeiwen.com/subject/eantbttx.html