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

开发 后端
Java编程语言一直在不断的发展,但是Java线程控制权却一直是重中之重。下面我们就来看看在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多线程如何创建多个线程
责任编辑:张浩 来源: 互联网
相关推荐

2010-03-15 16:31:34

Java多线程

2009-12-23 16:13:00

WPF Attache

2024-11-05 16:29:57

2011-02-25 09:23:00

Java类加载器

2015-09-02 08:57:56

JavaHashMap工作原理

2010-03-31 14:58:03

云计算

2009-12-07 16:07:03

PHP类的继承

2010-07-21 09:38:15

PHP缓存技术

2010-11-22 14:18:32

MySQL锁机制

2009-11-20 17:17:08

Oracle函数索引

2021-05-17 05:36:02

CSS 文字动画技巧

2009-06-16 10:51:14

Java源码

2009-10-16 18:20:07

综合布线系统

2009-12-01 16:34:21

PHP表单

2023-10-23 12:35:36

Golang追加操作

2014-08-22 09:08:23

远程控制木马

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach语句C# foreach语

2023-01-12 17:18:06

数据库多云

2012-02-28 14:43:43

点赞
收藏

51CTO技术栈公众号