多线程学习简记

学习框架:

1.进程、线程、并发的概念:什么是进程、什么是线程、什么是并发、什么又是并行

2.请详细叙述:程序与进程之间的关系

3.进程与线程之间的关系(现代操作系统、程序、进程、线程之间的关系)

4.一个cpu可以同时处理多个指令吗

多线程的重点

1.多线程的创建方式:

        重点:继承Thread类、实现Runnable接口

        了解:实现Callable接口、使用线程池

        变式:使用匿名内部类

2.线程中的生命周期&常用线程方法

3.多线程的线程安全问题&线程同步机制

        1)P136(13分22秒开始)、P137中有一段内容:讲的是动态演示版的线程安全问题的复现和同步出错原因的演示

4.线程同步机制带来的一系列问题:

        1)懒汉式的线程安全问题

                (1)懒汉式为什么会出现线程安全的问题

                (2)懒汉式如何解决线程安全问题

                (3)懒汉式解决线程安全问题更安全的方式

        2)线程的死锁问题_死锁的相关解决思路

        3)Lock的使用问题(与synchronized的作用相似,使用场景均用于线程同步)

                (1)与synchronized对比,详述Lock与synchronized的区别

        4)线程的通信机制

                (1)线程的通信机制的内容:大致概括就是(线程)同步机制下的几个方法的调用

                (2)线程的等待唤醒机制:就是这几个方法调用的程序运作过程(专业描述:线程的通信机制)

                (3)P139的案例2:生产者&消费者_28分钟后(涵盖了多线程的基础内容:线程的创建、同步机制、线程的通信)

                        A.明天复现完:多线程的课堂Demo再来完成这个【生产者&消费者】模型

  1. 程序与进程直接的关系:
    1. 程序是为了完成某项特定任务,而编写的一串指令的集合;进程是指正在计算机内存中运行的程序  或是  程序的一次执行过程
    2. 程序是静态的(指令的集合),进程是动态的(执行过程、正在运行)
  2. 进程与线程之间的关系
    1. 线程是进程的子集,线程是进程的一条执行路径(也可叫处理路径。->联想CPU的作用),一个进程至少有一条线程(若具有多个线程则代表,该进程支持多线程)
    2. 进程是计算机操作系统调度和分配资源的最小单位;线程是CPU调度和执行的最小单位
      1. 注意:进程的调度最小单位是指在操作系统中,而线程的调度最小单位指在CPU中(从包含层级来看:进程>线程;便可助记 --> 操作系统>CPU --> 进程+操作系统、线程+CPU)
  3. 并行-多核CPU-同一时刻、并发-单核CPU-同一时间段
    1. 并发编程是Java开发中的一个大重点(因为:如何最大程度的使用单个CPU(如何提升CPU的处理效率)是值得深究的事情)
  4. start()方法和run()方法的作用
    1. 在Java中,start()方法是用来启动一个子线程的,而run()方法则是用来执行该线程的代码。
    2. start()方法会创建一个新的线程,并将其状态设置为RUNNABLE,然后调用该线程的run()方法。如果直接调用run()方法,则只是在主线程中调用了一个普通函数而已 。
  5. Java中线程的创建方式有几种:五种。分别是:继承Thread类、实现Runnable接口、实现Callable接口、使用线程池、使用匿名类
    1. 继承Thread类、实现Runnable接口,是线程创建方式中的最基础的两个。
    2. 在五种创建方式中,Runnable的创建方式必须熟练掌握,Thread类的了解即可。
  6. 实现线程的创建和启动也可以使用匿名内部类对象。(这是变形写法)
    1. 具体形式:
      1. 创建对象调用start()方法时,可以使用匿名类的方式创建对象,从而用来调用start()方法
      2. 继承Thread类情况下,使用匿名类调用start()的写法和Runnable接口的写法略有不同
  7. `Thread.currentThread().getName()` 是Java中的一个方法,用于获取当前线程的名称。
    1. 当调用 `Thread.currentThread().getName()` 时,它会返回一个字符串,表示当前执行的线程的名称。这个名称通常用于标识和调试多线程程序中的不同线程。
    2. 以下是一个示例代码,展示如何使用 `Thread.currentThread().getName()` 方法:
      1. 运行以下代码,输出结果将显示当前线程的名称。请注意,线程名称通常是由操作系统和JVM在创建线程时自动分配的,因此具体的名称可能会因环境而异
      2. ​​​​
        public class Main {
            public static void main(String[] args) {
                // 获取当前线程的名称
                String threadName = Thread.currentThread().getName();
                System.out.println("当前线程的名称是:" + threadName);
            }
        }
  8. 注意super关键字调用父类构造器的相关知识点
  9. Java中的init方法注意下作用(Ctrl+F12可以搜索需要查找的目标方法,便于查看内部的写法)
    1. Ctrl + F12 弹出当前文件结构层(类的方法属性等),可以在弹出的层上直接输入,进行筛选
    2. ctrl + alt + 鼠标左键(ctrl+鼠标左键也可以):idea查看源码点击类名出现下划线跳转类idea查看源码点击类名出现下划线跳转类_idea点击有下划线的单词 就能跳转-CSDN博客
  10. 监视器锁(锁对象) 的作用:
    1. 锁对象的作用是防止多个线程同时访问共享资源,从而避免数据不一致的问题。在Java中,锁对象分为类锁、方法锁和对象锁三种类型。其中,类锁是指对整个类进行加锁,方法锁是指在方法前加上synchronized关键字,对象锁是指在代码块中使用synchronized(obj)对单个对象进行加锁。
  11. 为什么

线程创建方式2:Runnable

涉及接口的多态的原因

两种线程的创建方式中,更推荐Runnable接口的创建方式(适用面更广)

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值