Java中join、sleep、wait、yield浅析
来源:互联网 发布:curl json 格式化 编辑:程序博客网 时间:2024/06/06 00:17
Join方法
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。主线程生成并起动了子线程,主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。
示例:
public class ThreadTest implements Runnable {public static int a = 0;public synchronized void inc() {a++;}public void run() {for (int i = 0; i < 5; i++) {inc();}}public static void main(String[] args) throws Exception {Runnable r = new ThreadTest();Thread t1 = new Thread(r);t1.start();t1.join();System.out.println(a);}}
结果:5。Main线程必须等待t1线程执行完毕后才能继续执行。
sleep方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。
sleep使当前线程进入阻塞状态,在指定时间内不会执行。
wait方法
在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。
当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。
唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。
waite() 和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生 IllegalMonitorStateException的异常。
yield方法
暂停当前正在执行的线程对象。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
yield()只能使同优先级或更高优先级的线程有执行的机会。
- Java中join、sleep、wait、yield浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法浅析
- JAVA中sleep()、wait()、yield()、join()方法
- 浅析JAVA语言中yield()、join()、sleep()、wait()的不同用法
- java中join(),yield(),sleep()以及wait()的区别(转)
- Java中sleep,wait,yield,join的区别
- sleep join yield wait
- sleep() wait() yield() join()
- 【java】Wait、Sleep、Yield
- java--yield(),sleep(),wait()
- Java中sleep(),wait(),yield()的区别
- java多线程中yield(),sleep(),wait()区别
- javascript事件机制底层实现原理
- 工作记录--jni小问题
- [转]android界面的美化Shape的使用
- System.Uri类 - 获取Url的各种属性,文件名,参数,域名,端口等等
- Ubuntu下,清屏等终端常用命令
- Java中join、sleep、wait、yield浅析
- Effective Java, 2nd - Concurrency - Notes
- No handlers could be found for logger "stomp.py"
- 循环中给元素绑定事件
- AES加密
- Pascal's Triangle
- android 源码和CM源码下载地址
- 菜鸟眼中的springMVC
- UVa 1555 Garland 解题报告(推导)