线程优先级之Join

由于个人能力有限,以下理解如果有偏颇之处,请朋友们指导和批评,欢迎指正。

1、(如下代码,join在底部位置)主线程开始串行执行,先创建线程thread和thread1并start之后,此时三个线程才开始争抢cpu的执行权。那么此时thread1.join()之后导致主线程,只有在thread1执行之后,才能执行。那么执行流程就是这样的,thread和thread1先交替执行,当thread1执行完毕后,主线程才会执行。此时如果thread也没执行完的话,main和thread会交替执行。

/**
 * <p>标题: ThreadPriority</p>
 * <p>
 *    功能描述: Join 方法就是临时加入一个线程,等到该线程执行结束之后才能运行主线程但它不影响其它线程的执行。
 * </p>
 * <p>创建日期: 2016年3月4日 下午2:21:59</p>
 * <p>作者: lzd</p>
 * <p>版本: 1.0</p>
 */
public class ThreadJoin {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (i++ < 1000) {
                    System.out.println(Thread.currentThread().getName()
                            + "....................." + i);
                }
            }
        });
        thread.start();
        
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (i++ < 1000) {
                    System.out.println(Thread.currentThread().getName()
                            + "....................." + i);
                }
            }
        });
        thread1.start();    
        thread1.join();     //底部位置
    
        int j = 0;
        while (j++ < 2) {
            System.out.println("MAIN....................." + j);
        }
    }

2、(如下代码,join在顶部位置)主线程开始串行执行,先创建线程thread并start之后,此时thread.join()之后导致主线程,只有在thread执行之后,才能执行。同时thread1还未创建。此时执行流程就是这样的,thread先执行完毕后,主线程执行创建thread1之后,main和thread1会交替执行。

public class ThreadJoin {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (i++ < 1000) {
                    System.out.println(Thread.currentThread().getName()
                            + "....................." + i);
                }
            }
        });
        thread.start();
        thread.join();    //顶部位置
        
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (i++ < 1000) {
                    System.out.println(Thread.currentThread().getName()
                            + "....................." + i);
                }
            }
        });
        thread1.start();
        
        int j = 0;
        while (j++ < 500) {
            System.out.println("MAIN....................." + j);
        }
    }
}
posted @ 2016-03-04 16:17  姩澕  阅读(227)  评论(0编辑  收藏  举报