`
zyslovely
  • 浏览: 227916 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 线程学习(1)

 
阅读更多
线程的6种状态
new(新生)
runnable(可运行)
blocked(被阻塞)
waiting(等待)
timed waiting(计时等待)
terminated(被终止)

守护线程 的唯一作用是为其他线程提供服务,守护线程应该永远不去访问固有资源。
singal()方法 解除等待

synchronized
将静态方法声明为synchronized也是合法的。如果调用这种方法,改方法获得相关的类对象的内部锁。例如,如果bank类的一个静态同步方法,那么当该方法被调用时,bank.class对象的锁被锁住,因此,没有其他线程可以调用同一个类的这个或人和其他的同步静态方法。

线程使用建议:
1.最好即不使用Lock/Condition也不使用synchronized关键字,再许多情况下你可以使用concurrent包中的机制
2.如果synchronized适合你的程序,请尽量使用
3.只有需要Lock/Condition时才使用独有特性

notifyAll()方法 解除那些再该对象上调用wait方法的线程的阻塞状态
notify()方法,随机选择一个再该对象上调用wait方法的线程,解除其阻塞状态。该方法只能再一个同步方法或者同步块种调用

监视器概念:可以再不需要程序员考虑如何加锁的情况下,就可以保证多线程的安全性。

Volatile关键字为实力与的同步访问提供了一个免锁机制
private volatile boolean done;
在以下3个条件下,域的访问是安全的
(1)域是final,并且在构造器调用完成之后被访问
(2)对域的访问由公有的锁进行保护
(3)域是volatile的

读写锁:
java.util..concurrent.locks包定义了两个锁类:ReentrantLock类和Reentrantreadwritelock类。如果很多线程从一个数据结构读取数据而很少线程修改其中数据的话,reentrantreadwritelock是十分有用的。
readlock() 得到一个可以被多个读操作共用的毒所,但会排斥所有写操作
writelock() 得到一个写锁,排斥所有其他的读操作和写操作

为什么弃用stop()方法,该方法终止所有未结束的方法,包括run方法。当线程被终止,立即释放被它锁住的所有对象的锁。这会导致对象处于不一致的状态。
为什么弃用suspend()方法。suspend挂起一个持有一个锁的线程,那么,改锁再恢复之前是不可用的。如果调用suspend方法的线程试图获得同一个锁,那么程序死锁。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics