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线程控制权有关代码的详细介绍。
【编辑推荐】
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号