Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc

一、前言

1、为什么需要学习并发编程?

  • 源于JD的硬性要求,尤其是大厂

Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc_第1张图片

  • 面经中高频出现

    • 繁杂不堪
    • 水平层次不齐
    • 做归纳整理耗时费力
    • 难辨真伪
  • 成为高级工程师的必经之路,Java工程师成长路上必须翻越的

    • 几乎所有的程序都需要使用并发和多线程
    • 线上的服务用户量大,并发量轻松过万,如果不用并发编程,性能很快就会成为瓶颈
    • 职业升级过程,核心竞争力
    • 众多框架的原理和基础
      • Spring中对线程池、单例的应用
      • 数据库中的乐观锁思想
      • Log4j2对阻塞队列的应用

2、学习模块流程

  • 线程8大核心基础
  • Java内存模型—底层原理
  • 死锁的前世今生(从产生—>消除)

二、线程8大核心基础知识

1、8大核心知识全貌

Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc_第2张图片

2、知识点的核心问题串连

  • 实现多线程的方法到底有几种?

  • 线程的正确启动方式有几种?

  • 如何正确停止线程?(难点)

  • 线程的状态(生命周期

  • ThreadObject类的重要方法

  • 线程的各个属性

  • 未捕获异常的处理

  • 多线程的缺点


三、【实现多线程的方法】—线程8大核心

1、网上和数据的各种说法:鱼龙混杂

Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc_第3张图片


2、实现多线程官方方法:2种

  • 方法一:实现Runnable接口

    public class RunnableStyle implements Runnable{
           
        public static void main(String[] args) {
           
            Thread thread = new Thread(new RunnableStyle());
            thread.start();
        }
        @Override
        public void run() {
           
            System.out.println("用Runnable()方法实现线程");
        }
    }
    
  • 方法二:继承Thread

    public class ThreadStyle extends Thread {
           
        @Override
        public void run() {
           
            System.out.println("用Thread类实现线程");
        }
        public static void main(String[] args) {
           
            ThreadStyle threadStyle = new ThreadStyle();
            threadStyle.start();
        }
    }
    

3、两种方式的对比

  • 方法1(实现Runnable接口)更好
    • 解耦,run()方法跟线程继承应该是分开的
    • 资源的节约,通过线程池技术直接解放资源
    • 接口可被多实现

Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc_第4张图片

  • 实现Runnable接口,直接进行判断执行run()方法

    Day270.前言、线程8大核心基础导引、实现多线程的2种方式 -Juc_第5张图片

  • 继承Thread类,是对进行run()方法的重写,在java中继承重写了父类的方法后会抛弃父类run方法的定义内容,也就是说他没有进行上面的target判断,直接使用自己重写的run()方法

上面两种方式的run()的来源不同


你可能感兴趣的:(Juc,多线程,java,thread,runnable,juc)