zoukankan      html  css  js  c++  java
  • Java 多线程

    线程创建的三种方式

    1. 继承 Thread 类
    2. 实现 Runnable 接口
    3. 实现 Callable 接口
    继承Thread 类
    • 子类继承 Thread 类具备多线程能力
    • 启动线程:子类对象.start()
    • 不建议使用:避免OOP单继承局限性
    实现 Runnable 接口
    • 实现 Runnable 接口具有多线程能力
    • new Thread(目标对象).start()
    • 推荐使用:避免单继承局限性,方便同一个对象被多个线程使用
    实现 Callable 接口
    • 实现 Callable 接口,需要返回值类型
    • 重写 call(),需要抛出异常
    • FutureTask<~> futureTask = new FutureTask<~>(new 接口的实现类());
    • new Thread(futureTask).start();
    • 获取结果:Integer integer = futureTask.get();
    package com.zhang;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    //回顾总结线程的创建
    public class ThreadNew {
    
        public static void main(String[] args) {
            new MyThread1().start();
    
            new Thread(new MyThread2()).start();
    
            FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyThread3());
            new Thread(futureTask).start();
    
            try {
                Integer integer = futureTask.get();
                System.out.println(integer);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }
    
    //1.继承 Thread 类
    class MyThread1 extends Thread {
        @Override
        public void run() {
            System.out.println("This is MyThread1...");
        }
    }
    
    //2.实现 Runnable 接口
    class MyThread2 implements Runnable {
        @Override
        public void run() {
            System.out.println("This is MyThread2...");
        }
    }
    
    //3.实现 Callable 接口
    class MyThread3 implements Callable<Integer> {
    
        @Override
        public Integer call() throws Exception {
            System.out.println("This is MyThread3...");
            return 100;
        }
    }
    
    

    线程池的实现

    package com.zhang.syn;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    //测试线程池
    public class TestPool {
    
        public static void main(String[] args) {
            //1.创建服务,创建线程池
            //newFixedThreadPool 参数:线程池大小
            ExecutorService service = Executors.newFixedThreadPool(10);
    
            service.execute(new MyThread());
            service.execute(new MyThread());
            service.execute(new MyThread());
            service.execute(new MyThread());
            service.execute(new MyThread());
    
            //2.关闭连接
            service.shutdown();
        }
    }
    
    
    class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }
    
    

    笔记来源:https://www.bilibili.com/video/BV1V4411p7EF

  • 相关阅读:
    关于feign调用请求头丢失分析
    并发下编写SQL的注意事项
    Sentinel降级规则整理
    Mybatis-Plus使用整理
    Docker各种零散命令整理
    set集合怎么保证不重复的
    idea启动项目ava heap space
    网络穿透工具--钉钉HTTP穿透
    Log4j基本使用
    ide中普通java程序打包
  • 原文地址:https://www.cnblogs.com/snailzh/p/13432444.html
Copyright © 2011-2022 走看看