Java线程控制权源代码的深入探讨

Java线程控制权的问题十分重要,我们在不断的学习中需要不断的注意相关的问题。下面我们就来看看在源代码中Java线程控制权式如何体现的。当wait的时候其实就是已经放出了线程的控制权,所以one可以运行。one运行时调用notify后又唤醒了two线程所以打印顺序才是:

wait
sleep
wake up

我觉得我解释的已经很清楚了。wait被调用的时候放弃锁,而控制线程是否能使用内容的关键就在于锁,wait并不是thread的内容,而来自于object。你可以这样来理解wait,我wait下就把接力棒交出去了,我当前的这个线程就暂停运行,记住是当前的线程。然后当我交出的接力棒已经又回到我手中的时候,也就是说其他的线程已经完成了任务。这个时候我拿到接力棒继续奔跑。

有时候你应该把问题简单化,建议你看看thinking in java第四版,我明白你是想观察阻塞的出现,你可以将one。start放到two。start的上边就会明白什么意思了
 

 
 
 
  1. package test;  
  2. import java.util.LinkedList;  
  3. public class Test_2_A2 {  
  4. public static void main(String[] args) {  
  5. SubTreadOne one = new SubTreadOne();  
  6. SubTreadTwo two = new SubTreadTwo(one);  
  7. two.start();  
  8. try {  
  9. Thread.sleep(1000);  
  10. } catch (InterruptedException e) {  
  11. e.printStackTrace();  
  12. }  
  13. one.start();  
  14. }  
  15. }  
  16. class SubTreadOne extends Thread {  
  17. public SubTreadOne() {  
  18. }  
  19. public void run() {  
  20. try {  
  21. System.out.println("sleep");  
  22. Thread.sleep(3000);  
  23. synchronized (this) {  
  24. this.notifyAll();  
  25. }  
  26. }catch (InterruptedException e) {  
  27. e.printStackTrace();  
  28. }  
  29. }  
  30. }  
  31. class SubTreadTwo extends Thread {  
  32. SubTreadOne one;  
  33. public SubTreadTwo(SubTreadOne one) {  
  34. this.one = one;  
  35. }  
  36. public SubTreadTwo() {  
  37. }  
  38. public void run() {  
  39. try {  
  40. synchronized (one) {  
  41. System.out.println("wait");  
  42. one.wait();  
  43. System.out.println("wake up");  
  44. }  
  45. } catch (InterruptedException e) {  
  46. e.printStackTrace();  
  47. }  
  48. }  

以上就是对Java线程控制权有关代码的详细介绍。

【编辑推荐】

  1. 使用Java多线程实现任务分发
  2. 用Java多线程实现无阻塞读取远程文件
  3. Java多线程中wait语句的具体使用方法
  4. Java多线程如何解决关键字封锁问题
  5. Java多线程如何创建多个线程

网站标题:Java线程控制权源代码的深入探讨
URL链接:http://www.csdahua.cn/qtweb/news3/377453.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网