多线程常见知识点总结(简单版)

本文总结了Java多线程中的关键知识点,包括进程与线程的概念、线程的创建方式、线程状态、线程同步(synchronized、wait()、notify())、线程池的工作流程以及线程池的创建参数和种类。还讨论了volatile关键字的作用,以及ThreadLocal、锁(Lock、ReentrantLock)等高级特性的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是进程?

线程就是系统中正在运行的程序,程序一旦运行就是进程,每个进程都有独立的地址空间,一个进程无法访问另一个进程的变量和数据结构,想要访问,需要使用进程通信,比如管道.文件等

2.什么是线程?

线程就是系统能够进行的最小调度单位,他被包含在进程中,一个进程中可以有多个并发的线程,每条线程执行不同的任务.

3.线程实现的方式?

        继承Thread类

        实现Runnable接口

使用Callable的Future

或者使用线程池

4.Thread的start()方法和run()方法有什么区别?

start方法是启动线程,真正实现了多线程通过调用thread类的start方法来启动一个线程,这是线程就处于就绪状态,并没运行,然后通过run方法来完成线程运行,run方法运行结束,线程终止,cpu调度其他线程

5.线程的状态

        

6.如何知道代码段被哪个线程带调用

                通过获取线程的名称就可以知道了

                Thread.currentThread().getName()

7.sleep()方法

        是在指定的毫秒数内,让当前的正在执行的线程进入休眠状态

8.yield()方法

        放弃当前cpu资源,让给其他任务.

9.线程的优先级

        线程的优先级是获取cpu资源比较多,但是不能保证一定优先级高,就先执行

        优先级分为1-10个等级,数字越大优先级越高,默认优先级是5,超出优先级范围会抛出异常

        优先级是具有继承性的,比如a线程启动b线程,那么b线程和a线程优先级是一样的

        设置优先级使用 setPriority(级别)方法

10线程分类?

        用户线程

        守护线程

11.守护线程的特点?

        守护线程用做程序中后台调度支持性工作,比如java中经典的守护线程GC

        Thread.setDaemon(true)设置此线程是守护线程

12 join

        join就是把指定的线程加入当前的线程

        举例子:      比如join线程a  会让当前的线程b进入等待,知道线程a结束生命周期,线程b才会执行

13 synchronized?

        java中的关键字,防止线程之间的干扰,如果一个对象时对多个线程可见的,那么对该对象的所有读写操作都将通过同步的方法来进行

        用法;

                代码块

                方法

        锁的是什么?

                普通方法  锁的是当前类的实例对象

                静态同步方法  锁的是当前类的Class对象

                同步方法块  锁的是synchronized()括号里面的对象

14.锁的升级

        低--高     无锁状态---偏向锁---轻量级锁---重量级锁

 15.偏向锁

16.轻量级锁

        

 17 CAS (比较和替换)

        CAS是什么?彻底搞懂CAS_阿杰-优快云博客_cas

 CAS实现原子操作的3大问题

        1.CAS的ABA问题

                 2.循环时间长开销大的问题

                 3.只能保证一个共享变量的原子操作问题

18.volatile关键字

        volatile保证线程间变量的可见性,简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动

        线程对变量进行修改之后,要立刻回写到主内存

        线程对变量读取的时候,要从主内存中读,而不是缓存

        volatile不能保证原子性        

19.wati()

        使当前执行代码的线程进行等待,他是object的方法 会将当前线程置入预执行队列中,直到收到通知或中断为止

注意: 待用wait()方法之前,线程获得了锁,待用wait()方法后,线程进入等待状态,会释放锁

        

20notify

也是object类的方法 也是在同步方法内或者同步代码块内部调用,   

等待其他线程执行完他们的指定代码过后 再将其唤醒(notify());在有多个线程进行等待时, 如果需要,可以使用 notifyAll()来唤醒所有的等待线程。      

21 ThreadLocal

        主要解决每一个线程想要绑定自己的值,存放线程的私有数据

22.lock锁                 synchronization不具备的特性

        

 23.Reentrantlock重入锁

重入锁:  任意线程在获取到锁之后能够再次获取锁,而不被阻塞

       解决了 1.锁需要去识别获取锁的线程是否是当前占据锁的线程,如果是则再次成功

                    2.锁的最终释放,线程重复n次获取了锁,随后在第n次释放该锁后,其他线程能够获取到该锁

24 为什么使用线程池

        降低资源消耗           重复利用已经创建的线程降低线程创建和销毁造成的资源消耗

        提高响应速度           当任务到达时,任务不需要等到线程创建就可以立即执行

        提供线程可以管理性              可以通过设置合理分配,调优,监控

25 线程池工作流程

        1.判断核心线程池里的线程是否都有在执行任务,

                        否------创建一个新的工作线程来执行任务

                        是-------走下一个流程

        2.判断工作队列是否已满

                         否--------新任务存储在这个工作队列

                          是--------走下一个流程

        3.判断线程池里的线程是否都在工作状态

                          否---------创建一个新的工作线程

                          是---------走下个流程

         4.按照设置的策略来处理无法执行的任务

26.创建线程池的参数有哪些?

        

public ThreadPoolExecutor (    int      corePoolSize ,  //线程池大小
                                                int      maximumPoolSize ,线程池最大数,允许创建的最大线程数
                                        l       ong    keepAliveTime ,线程保持活动时间,线程池工作线程空闲后,保持存货的时间,如果任务多,并且每个任务执行时间较短,可以调大时间,提高线程利用率
                                                TimeUnit    unit ,线程保持活动时间单位
                BlockingQueue < Runnable >   workQueue ,任务队列
                        ThreadFactory threadFactory ,  创建线程的工厂
                        RejectedExecutionHandler handler )  拒绝策略

        

      

27.线程池种类

        4\类

         newCachedThreadPool(重用性)

        newFixedThreadPool(常用 固定线程数量)

        newScheduledThreadPool(定期执行)

        newSingleThreadExecutor(发生异常重启一个线程)

28.向线程池提交任务

        execute()和submit()两种方式提交任务

        shutdown()关闭线程池

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值