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.}

  49.}

  以上就是对Java线程控制权有关代码的详细介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值