sleep和yield有点相似都是让步,但是让法不一样
sleep表示,当前线程停 一定时间后,再往下执行。把机会让给别的线程。他不管优先级,反正哥就是让别的先走
yield表示给同优先级或更高优先级的线程一个运行的机会。至于有没有生效,不太确定。
join:表示等其它线程,它有一个时间参数,也可以没有时间参数。当没有的时候,是表示,等这个线程执行完才往下执行。
当有时间参数的时候,有两种情况:
先设:主线程为mainThread,分线程为aThread.
mainThread里执行aThread.join(10000) ;表示mainThread等aThread执行10秒再说。但如果10秒里,aThread最多只要执行5秒就完事,那么,mainThread只要等5秒就会不再等了。因为aThread已经完事了。如果10秒里aThread要10秒以上的时间才能执行完。那会怎样呢?mainThread会不管你执行完没完,等你10秒就不等了。哥先走一步。
复制代码
以上代码是等了10秒,但是分线程2秒就完事,所以,2秒后主线程就开始往下走了。大家可以修改时间感受一下,记住如果join()里没有时间参数,表示,无限等,等它完事才往下执行,比较痴情哦。杨过才16年呢
sleep表示,当前线程停 一定时间后,再往下执行。把机会让给别的线程。他不管优先级,反正哥就是让别的先走
yield表示给同优先级或更高优先级的线程一个运行的机会。至于有没有生效,不太确定。
join:表示等其它线程,它有一个时间参数,也可以没有时间参数。当没有的时候,是表示,等这个线程执行完才往下执行。
当有时间参数的时候,有两种情况:
先设:主线程为mainThread,分线程为aThread.
mainThread里执行aThread.join(10000) ;表示mainThread等aThread执行10秒再说。但如果10秒里,aThread最多只要执行5秒就完事,那么,mainThread只要等5秒就会不再等了。因为aThread已经完事了。如果10秒里aThread要10秒以上的时间才能执行完。那会怎样呢?mainThread会不管你执行完没完,等你10秒就不等了。哥先走一步。
- package join;
- public class JoinTest
- {
- public static void main(String[] args) {
- Thread t = new Thread(new MyRunable());
- t.start();
- try {
- System.out.println("join前");
- t.join(100000);
- System.out.println("join后");
} - catch (InterruptedException e) {
- e.printStackTrace();
} - }
- }
- class MyRunable implements Runnable {
- @Override
- public void run() {
- try {
- System.out.println("开始睡");
- Thread.sleep(2000);
- System.out.println("睡完");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
以上代码是等了10秒,但是分线程2秒就完事,所以,2秒后主线程就开始往下走了。大家可以修改时间感受一下,记住如果join()里没有时间参数,表示,无限等,等它完事才往下执行,比较痴情哦。杨过才16年呢