多线程入门01 —— 新线程创建方法

1.直接继承Thread类

  • 代码示例

    package com.pbx.lesson01;
    
    /**
     * @author BruceXu
     * @date 2020/9/13
     */
    public class ThreadDemo01 extends Thread {
        public static void main(String[] args) {
            // 创建一个线程对象,并通过start方法开启该线程
            ThreadDemo01 thread = new ThreadDemo01();
            thread.start();
    
            for (int i = 0; i < 20; i++) {
                System.out.println(i + "-->我在学习");
            }
        }
    
        @Override
        public void run() {
            // 线程体需要执行的动作
            for (int i = 0; i < 20; i++) {
                System.out.println(i + "-->我在玩手机");
            }
        }
    }
    
  • 执行结果

从结果中可以看到,main线程和子线程在交替执行

  • 存在多个线程时,执行那个线程完全取决于CPU

2.实现runnable接口

  • 代码示例

    package com.pbx.lesson01;
    
    /**
     * @author BruceXu
     * @date 2020/9/13
     */
    public class ThreadDemo02 implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                System.out.println(i+"-->我在玩手机");
            }
        }
    
        public static void main(String[] args) {
    
            new Thread(new ThreadDemo02()).start();
    
            for (int i = 0; i < 20; i++) {
                System.out.println(i + "-->我在学习");
            }
        }
    
    }
    
  • 执行结果

3.实现callable接口

  • 代码示例

    package com.pbx.lesson01;
    
    import java.util.concurrent.*;
    
    /**
     * @author BruceXu
     * @date 2020/9/13
     */
    public class ThreadDemo03 implements Callable<String> {
    
        private final String name;
    
        public ThreadDemo03(String name) {
            this.name = name;
        }
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
    
            ThreadDemo03 t1 = new ThreadDemo03("张三");
            ThreadDemo03 t2 = new ThreadDemo03("李四");
            ThreadDemo03 t3 = new ThreadDemo03("王五");
    
            // 1.创建执行服务
            ExecutorService service = Executors.newFixedThreadPool(3);
    
            // 2.提交执行
            Future<String> r1 = service.submit(t1);
            Future<String> r2 = service.submit(t2);
            Future<String> r3 = service.submit(t3);
    
            // 3.获取结果
            System.out.println(r1.get());
            System.out.println(r2.get());
            System.out.println(r3.get());
    
            // 4.关闭服务
            service.shutdown();
    
        }
    
        @Override
        public String call() throws Exception {
            for (int i = 0; i < 10; i++) {
                System.out.println(name + ":" + i + "-->在学习");
            }
            return name + "在学习";
        }
    }
    
  • 执行结果

posted @ 2020-09-18 23:54  PrimaBruceXu  阅读(153)  评论(0编辑  收藏  举报