链接地址:http://www.xx566.com/detail/99.html
java.lang.Thread类是传统java用来调度和管理线程的工具,其提供了多种方法来操控线程;从java 5开始,Java提供了Java.util.concurrent工具包用来进行并发编程,并引入了lock,其提供了Condition接 口,Condition实例实质被绑定在一个lock上,通过其提供的方法,也可以方便的对线程进行调度和管理,一系列眼花缭乱的方法:sleep()、 join()、yield()、interrupt()、wait()与await()、notify()与signal()、notifyAll()与 signalAll(),它们之间又有哪些异同呢,下面我们来逐一学习一下。
sleep()方法:使调用此方法的线程暂停执行一段时间,让其他优先级低的线程有机会获得执行,sleep()方法不释放对象锁,即如果有Synchronized,或ReentrantLock时,其它线程仍不能访问共享数据。
join()方法:使调用此方法的线程得以执行,当前线程阻塞,只有当调用join方法的线程执行完毕后,才继续执行当前线程,如线程A调用线程B.join(),则线程A阻塞,执行线程B,线程B执行完后,A才继续执行。
yield()方法:与sleep()方法类似,暂停当前正在执行的线程对象,并执行其他具有同等优先级的线程,yield()方法无法指定当前线程的阻塞时间。
wait()、notify()和notifyAll()用于协调多线程对共享数据的访问,必须在Synchronized代码块里面才可以使用这三个方 法,Java 5 提供了Condition,有与之类似的方法,await()、signal()和signalAll()。
wait()方法:使当前线程暂停执行并释放对象锁,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。
await()方法:使当前线程在接收到信号或中断命令之前,一直处于等待状态,并释放与Condition相关的锁。
notify()和signal()方法:随机选择线程等待池中的处于等待状态的线程,并将其唤醒。
notifyAll()和signalAll()方法:唤醒所有处于等待状态的线程。
下面提供几本关于并发编程的书籍,供大家下载学习,声明:仅供学习交流使用,如有侵权,请及时联系我,我会尽快修正。
1、java线程基础
2、java并发编程实战
3、Java Concurrency in Practice(中文版)
4、Java Concurrency in Practice(英文版)
5、java多线程设计模式
6、java-threads-tutorial
7、Programming Concurrency on the JVM