示例线程sleep执行过程解析
来源:互联网 发布:好找工作的专业知乎 编辑:程序博客网 时间:2024/05/16 12:08
//测试用sleep方法时线程的执行过程
package thread.test;
import java.util.Date;
public class Test4ThreadMethod {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
thread.interrupt();
}
}
//为了测试方便选择继承Thread,推荐使用实现Runnable接口方式
class MyThread extends Thread{
public void run(){
while(true){
System.out.println("------" + new Date() + "--------");
try{
sleep(1000);
}catch(InterruptedException e){
System.out.println("thread is over");
return;
}
}
}
}
==================输出结果如下==========================
------Sun Sep 01 10:43:31 CST 2013--------
------Sun Sep 01 10:43:32 CST 2013--------
------Sun Sep 01 10:43:33 CST 2013--------
------Sun Sep 01 10:43:34 CST 2013--------
------Sun Sep 01 10:43:35 CST 2013--------
------Sun Sep 01 10:43:36 CST 2013--------
------Sun Sep 01 10:43:37 CST 2013--------
------Sun Sep 01 10:43:38 CST 2013--------
------Sun Sep 01 10:43:39 CST 2013--------
------Sun Sep 01 10:43:40 CST 2013--------
thread is over
当前是两个线程在并行执行(实际是轮换执行,但CPU太快了看似是并行执行的):main线程(即常说的主线程)和MyThread线程。这两个线程互抢CPU时间片,不一定是均等的。
先简单解释代码含义吧:MyThread线程每隔1秒打印一次当前计算机时间,而main线程则想自己睡10秒。千万不要认为他们是相互影响的,他们谁也不妨碍谁,可以认为是相互独立的。
注意: 因为这里main线程没有打印输出,所以千万不要认为是MyThread线程先执行的,他们谁先执行时随机的。如果想试试是否这样,你可以设断点每步跟一下。
他们是这样跑的:MyThread线程跑他自己的,main线程也跑他自己的。一旦main线程抢到时间片就会执行它,可不巧的是它拥有了时间片却要睡10秒,那不好意思啦,它马上进入睡眠状态,即阻塞状态,只有等到阻塞解除才有资格进入就绪状态和MyThread线程抢时间片。这时MyThread线程很高兴获得了10秒的时间片,MyThread线程执行,
正执行着呢,又遇到thread.interrupt();,就是说MyThread线程被打断,MyThread线程自己逮着这个异常了,那么他自己就执行自己的try...catch()..进行结束。此时还没有完,
MyThread线程你结束了我main线程还没结束呢,一直等到main线程结束才算真正的结束了,但MyThread线程已经做出了结束的动作。
简单的还可以这么理解:只有俩线程在跑,谁跑完了谁就停了,(当然这只限于非死循环的线程,)谁遇到事(异常等)谁自己解决,解决的结果一般是谁也不要影响谁(除了return)。
本文有很多不足之处,希望大家批评指正!- 示例线程sleep执行过程解析
- 线程休眠示例Thread.sleep()
- 示例详解JavaScript解析器的执行过程
- Java线程休眠(sleep)示例
- 线程第七课,sleep示例代码
- sleep阻塞当前正在执行的线程
- [Java线程]sleep,join,interrupt解析
- 线程sleep()、wait()、yield()、join()方法 解析
- Java 线程 sleep wait 深入解析 Thread
- TC执行过程解析
- make执行过程解析
- sleep和wait区别以及线程池简单实现示例
- Oracle 存储过程 延迟执行 DBMS_LOCK.SLEEP(60);
- The Java™ Tutorials — Concurrency :Pausing Execution with Sleep 利用Sleep暂停线程执行
- Java线程源码解析之yield和sleep
- Nutch Crawl执行过程解析
- adb命令执行过程解析
- hello world解析执行过程
- mysql 白皮书维护指南
- poj3083 Children of the Candy Corn
- wikioi p1077 多源最短路
- Free Book
- 浙江大学PAT上机题解析之1012. 数字分类 (20)
- 示例线程sleep执行过程解析
- CXF Spring开发WebService,基于SOAP和REST方式
- 二维数组中查找一个数
- POJ 3349 Snowflake Snow Snowflakes
- LeetCode 15: 3Sum
- wikioi p1079 回家
- 行内元素和块级元素
- C#数组
- CONST用法小议