• 04.join与interrupt


    join加入

    public class JoinDemo {
        public volatile static int i = 0;
        public static class AddThread extends Thread{
            @Override
            public void run() {
                for (i=0;i<10000000;i++);
            }
        }
        public static void main(String[] args) throws InterruptedException{
            AddThread addThread = new AddThread();
            addThread.start();
            addThread.join();
            System.out.println(i);
        }
    }
    
    
    public class JoinDemo {
        public static void main(String[] args) throws InterruptedException{
            Thread threadA = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("child threadA over");
                }
            });
            Thread threadB = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("child threadB over");
                }
            });
            threadA.start();
            threadB.start();
            System.out.println("wait all thread over");
            //等待子线程执行完毕
            threadA.join();//主线程调用threadA的join()方法后被阻塞,等待threadA执行完毕
            threadB.join();
            System.out.println("all thread over");
            //wait all thread over
            //child threadA over
            //child threadB over
            //all thread over
    
            Thread threadOne = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("threadOne begin run");
                    while (true){} //死循环
                }
            });
            //获取主线程
            final Thread mainThread = Thread.currentThread();
            Thread threadTwo = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //中断主线程
                    mainThread.interrupt();
                    System.out.println("threadTwo begin run");
                }
            });
            threadOne.start();
            threadTwo.start();
            threadOne.join();
            //threadOne begin run
            //threadTwo begin run
            //Exception in thread "main" java.lang.InterruptedException
    
            //在 threadOne 线程里面执行死循环,主线程调用 threadOne 的 join 方 法阻 塞 自己 等 待线程 threadOne 执行完毕,
            // 待 threadTwo 休眠 ls 后会调用主线程的 interrupt() 方法设置主线程的中断标志,
            // 从结果看在主线程中的 threadOne.join() 处会抛 出 InterruptedException 异常
        }
    }
    
  • 相关阅读:
    [BZOJ 1066] [SCOI2007] 蜥蜴 【最大流】
    [BZOJ 1084] [SCOI2005] 最大子矩阵 【DP】
    [BZOJ 1070] [SCOI2007] 修车 【费用流】
    [BZOJ 1878] [SDOI2009] HH的项链
    [BZOJ 3110] [Zjoi2013] K大数查询 【树套树】
    [HDOJ 1171] Big Event in HDU 【完全背包】
    Shell基本语法---函数
    Shell基本语法---shell数组
    Shell基本语法---while语句
    Shell基本语法---for语句
  • 原文地址:https://www.cnblogs.com/fly-book/p/11361670.html
Copyright © 2020-2023  润新知