Java线程控制权的问题十分重要我们在不断的学习中需要不断的注意相关的问题下面我们就来看看在源代码中Java <>线程控制权式如何体现的当wait的时候其实就是已经放出了线程的控制权所以one可以运行one运行时调用notify后又唤醒了two线程所以打印顺序才是
wait
sleep
wake up
我觉得我解释的已经很清楚了wait被调用的时候放弃锁而控制线程是否能使用内容的关键就在于锁wait并不是thread的内容而来自于object你可以这样来理解wait我wait下就把接力棒交出去了我当前的这个线程就暂停运行记住是当前的线程然后当我交出的接力棒已经又回到我手中的时候也就是说其他的线程已经完成了任务这个时候我拿到接力棒继续奔跑
有时候你应该把问题简单化建议你看看thinking in java第四版我明白你是想观察阻塞的出现你可以将onestart放到twostart的上边就会明白什么意思了
package test;
import javautilLinkedList;
public class Test__A {
public static void main(String[] args) {
SubTreadOne one = new SubTreadOne();
SubTreadTwo two = new SubTreadTwo(one);
twostart();
try {
Threadsleep();
} catch (InterruptedException e) {
eprintStackTrace();
}
onestart();
}
}
class SubTreadOne extends Thread {
public SubTreadOne() {
}
public void run() {
try {
Systemoutprintln(sleep);
Threadsleep();
synchronized (this) {
thisnotifyAll();
}
}catch (InterruptedException e) {
eprintStackTrace();
}
}
}
class SubTreadTwo extends Thread {
SubTreadOne one;
public SubTreadTwo(SubTreadOne one) {
thisone = one;
}
public SubTreadTwo() {
}
public void run() {
try {
synchronized (one) {
Systemoutprintln(wait);
onewait();
Systemoutprintln(wake up);
}
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
以上就是对Java线程控制权有关代码的详细介绍