zoukankan      html  css  js  c++  java
  • 让线程顺序执行代码

    方法一:顺序在线程中创建实例

    public class TestTwo {
        
        static TestTwo t=new TestTwo();
        class T1 extends Thread{
            @Override
            public void run() {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //T1线程中要处理的东西
                System.out.println("T1线程执行");
            }
        }
    
        class T2 extends Thread{
            @Override
            public void run() {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //T2线程中要处理的东西
                System.out.println("T2线程执行");
                t.new T1().start();
            }
        }
    
        class T3 extends Thread{
            @Override
            public void run() {
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //T3线程中要处理的东西
                System.out.println("T3线程执行");
                t.new T2().start();
            }
        }
    
        public static void main(String[] args) {
            t.new T3().start();
        }
    
    }

    方法二:

    参考:https://blog.csdn.net/eene894777/article/details/74942485

    newSingleThreadExecutor()
    这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行

    public class TestJoin {
    
        public static void main(String[] args) throws InterruptedException {
            final Thread t1 = new Thread(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " run 1");
                }
            }, "T1");
            final Thread t2 = new Thread(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " run 2");
                    try {
                        t1.join(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, "T2");
            final Thread t3 = new Thread(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " run 3");
                    try {
                        t2.join(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, "T3");
            // 执行方法一、线程不会顺序执行
    //        t1.start();
    //        t2.start();
    //        t3.start();
    
            // 执行方法二、使用单个任务的线程池来实现、线程顺序执行
            ExecutorService executor = Executors.newSingleThreadExecutor();
            executor.submit(t1);
            executor.submit(t2);
            executor.submit(t3);
            executor.shutdown();
        }
    }
  • 相关阅读:
    百度面试面经
    为什么配置环境变量
    第一、二、三范式 AND BCNF AND 4NF
    三次握手四次挥手
    Bootrap 项目实战(微金所前端首页)第三部分(CSS,js源码)
    Bootrap 项目实战(微金所前端首页)第二部分(首页源码)
    Bootrap 项目实战(微金所前端首页)第一部分
    CSS z-index在ie67中不起作用
    CSS 加号选择器("+")
    CSS的nth-of-type和nth-child的区别
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/11642942.html
Copyright © 2011-2022 走看看