线程基础2—sleep和join
来源:互联网 发布:技术研究工程师 知乎 编辑:程序博客网 时间:2024/06/06 05:52
一、sleep(毫秒数)方法
1、sleep方法是一个静态方法。
<span style="font-family:KaiTi_GB2312;font-size:24px;">public class ThreadTest extends Thread{ public static void main(String[] args){ ThreadTest thread=new ThreadTest(); thread.start(); try {sleep(10000);} catch (InterruptedException e) {e.printStackTrace();} System.out.println("main线程被执行"); } public void run(){ try {sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} System.out.println("ThreadTest线程被执行"); }}</span>输出结果:
ThreadTest线程被执行
main线程被执行
如果将sleep(10000)改为thread.sleep(10000)
public class ThreadTest extends Thread{ public static void main(String[] args){ ThreadTest thread=new ThreadTest(); thread.start(); try {thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();} System.out.println("main线程被执行"); } public void run(){ try {sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} System.out.println("ThreadTest线程被执行"); }}
输出结果:
ThreadTest线程被执行
main线程被执行
由以上可以看出,thread.sleep方法并不是休眠thread线程,而是休眠main线程。
sleep方法的执行不是取决于哪个线程通过“.”调用,而是在哪个线程中声明,在main方法中声明sleep或Thread.sleep休眠的是main线程,其他线程对象一般在run()方法中调用其sleep使该线程休眠。
2、线程进入休眠状态后,并没有释放所占用的CPU片段。sleep方法让一个线程进入睡眠状态,等待一定的时间之后,自动醒来进入到可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程的运行也需要时间。
3、sleep方法需捕获InterruptedException异常。线程在sleep过程中有可能被其他对象调用它的interrupt()方法,产生InterruptedException异常,如果程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态;如果程序捕获了这个异常,那么程序就会继续执catch语句块(可能还有finally语句块)以及以后的代码。
二、join()方法
1、一个线程调用join()方法,当前正在执行的线程被阻塞,直至调用join方法的线程执行完毕,当前线程才能继续执行。
public class Test { public static class Thread_A extends Thread{ public void run(){try { sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("A线程执行..."); } } public static void main(String[] args){ Thread_A a=new Thread_A(); a.start(); try {a.join();} catch (InterruptedException e) {e.printStackTrace();} System.out.println("main线程执行..."); }}运行结果:
A线程执行...main线程执行...
2、调用join()方法时可以带一个参数( join(long millis)
join(long millis, int nanos)
),目标线程在时间到期时,即使没有结束,join() 方法也返回,被挂起的线程恢复执行
3、对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法,注意异常处理。
- 线程基础2—sleep和join
- android 基础 线程sleep,join,yield
- java 线程 --- join,sleep,yield 基础学习
- 线程:sleep()、wait()、yield()和join()方法
- 线程:sleep()、wait()、yield()和join()方法
- 线程join和sleep的区别
- 线程方法join()和sleep()区别
- 线程Sleep、Yield、Join
- java 多线程(2) 线程的调度和优先级 / sleep() / interrupt() 打断join() / yield() / setPriority()
- wait,notify,sleep,join和线程同步问题
- wait,notify,sleep,join和线程同步问题(续)
- wait,notify,sleep,join和线程同步问题
- JAVA -- 线程sleep()和yield()、join()方法区别
- java的sleep(),join()和后台线程详解
- sleep、yield和join
- sleep和yield,join
- Java——线程sleep()join()yield()方法
- JavaSE_50th_线程——sleep、join、yield方法
- Android Intent解析
- AndroidManifest.xml配置文件详解
- sqlserver常用知识点备忘录
- 关于UEditor在struts2下图片上传问题
- 自加自减
- 线程基础2—sleep和join
- C++输入cin详解
- 蛋疼的/Collision/b2TimeOfImpact.o.d:1: *** target pattern contains no `%'. Stop.错误
- LA 2678 Subsequence
- 心烦
- C++实现队列
- CMFCEditBrowseCtrl问题的解决
- Tkinter Logo的设置
- oracle 修改sys 、system、scott密码