温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样进行Java线程控制权源代码的深入探讨

发布时间:2021-11-20 17:59:09 来源:亿速云 阅读:148 作者:柒染 栏目:编程语言

怎样进行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的上边就会明白什么意思了

package test;  import java.util.LinkedList;  public class Test_2_A2 {  public static void main(String[] args) {  SubTreadOne one = new SubTreadOne();  SubTreadTwo two = new SubTreadTwo(one);  two.start();  try {  Thread.sleep(1000);  } catch (InterruptedException e) {  e.printStackTrace();  }  one.start();  }  }  class SubTreadOne extends Thread {  public SubTreadOne() {  }  public void run() {  try {  System.out.println("sleep");  Thread.sleep(3000);  synchronized (this) {  this.notifyAll();  }  }catch (InterruptedException e) {  e.printStackTrace();  }  }  }  class SubTreadTwo extends Thread {  SubTreadOne one;  public SubTreadTwo(SubTreadOne one) {  this.one = one;  }  public SubTreadTwo() {  }  public void run() {  try {  synchronized (one) {  System.out.println("wait");  one.wait();  System.out.println("wake up");  }  } catch (InterruptedException e) {  e.printStackTrace();  }  }  }

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

看完上述内容,你们掌握怎样进行Java线程控制权源代码的深入探讨的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI