栏目导航
热点推荐
- 三十条有用的 Java 编程规则
- Java制作水印图片源码
- Java常见异常及可能的导致原因
- Java中的修饰词使用方法总结
- J2EE系统异常的处理准则
- Java中的异常、断言、日志解析(
- Java面试技巧:Java面试题集锦(
- 面向Java开发人员的Scala指南:
- Java程序员:一刻钟精通正则表达
- 网友经验分享:学好java开发的关
- 专家解答:创建表格与数据库进行
- Java远程访问Domino数据库
阅览排行
深入探讨Java线程控制权源代码
www.jz123.cn 2010-04-29 来源: 中国建站 责任编辑(袁袁) 我要投递新闻
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线程控制权有关代码的详细介绍。
上一篇:概述Swing组件与外部线程 下一篇:Java多线程中wait语句的具体使用方法