zoukankan      html  css  js  c++  java
  • 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 异常
        }
    }
    
  • 相关阅读:
    Codeforces 876C Classroom Watch:枚举
    Codeforces 876B Divisiblity of Differences:数学【任意两数之差为k的倍数】
    BZOJ 3943 [Usaco2015 Feb]SuperBull:最大生成树
    BZOJ 3391 [Usaco2004 Dec]Tree Cutting网络破坏:dfs【无根树 节点分枝子树大小】
    markdown常用数学符号小结
    BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)
    一维二维树状数组写法总结
    hdu4352-XHXJ's LIS状压DP+数位DP
    常用Git命令以及出现的状况ing
    bitset简单用法
  • 原文地址:https://www.cnblogs.com/fly-book/p/11361670.html
Copyright © 2011-2022 走看看