iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java多线程的核心知识点是什么
  • 455
分享到

java多线程的核心知识点是什么

2023-06-20 16:06:27 455人浏览 泡泡鱼
摘要

这篇文章主要介绍“java多线程的核心知识点是什么”,在日常操作中,相信很多人在java多线程的核心知识点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java多线程的核心知识点是什么”的疑惑有所帮助!

这篇文章主要介绍“java多线程的核心知识点是什么”,在日常操作中,相信很多人在java多线程的核心知识点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java多线程的核心知识点是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 一、的概念

  • 二、synchronized 的使用方式

  • 三、synchronized 的实现原理列

    • 小结

  • 四、线程池是什么

    • 五、为什么要用线程池?

      • 六、看下类图,从整体上理解下

        • 七、线程池的创建

          • 八、线程池核心参数说明

            • 九、几个疑问点

              • 1、是怎么保证线程不销毁的?

              • 2 提交任务有哪几种方式?

              • 3 拒绝策略都有哪些?

              • 4 线程池的关闭

              • 5 初始化线程池时线程数的选择

            • 十、总结

              一、锁的概念

              先来聊聊这几个概念,总不能聊起来的时候啥也不知道,只知道干活也没有用。

              公平锁:当线程A获取访问该对象,获取到锁后,此时内部存在一个计数器num+1,其他线程想访问该对象,就会进行排队等待(等待队列最前一个线程处于待唤醒状态),直到线程A释放锁(num = 0),此时会唤醒处于待唤醒状态的线程进行获取锁的操作,一直循环。如果线程A再次尝试获取该对象锁时,会检查该对象锁释放已经被占用,如果还是当前线程占用锁,则直接获得锁,不用进入排队。

              非公平锁:当线程A在释放锁后,等待对象的线程会进行资源竞争,竞争成功的线程将获取该锁,其他线程继续睡眠。

              公平锁是严格的以FIFO的方式进行锁的竞争,但是非公平锁是无序的锁竞争,刚释放锁的线程很大程度上能比较快的获取到锁,队列中的线程只能等待,所以非公平锁可能会有“饥饿”的问题。但是重复的锁获取能减小线程之间的切换,而公平锁则是严格的线程切换,这样对操作系统的影响是比较大的,所以非公平锁的吞吐量是大于公平锁的,这也是为什么jdk将非公平锁作为默认的实现。

              悲观锁:总是假设最坏的情况,每次想要使用数据的时候就恰好别人也要修改数据,一切是以安全第一,所以在每次操作资源的时候都会先加锁,不管有没有人抢,然后独占资源。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现

              乐观锁:乐观锁和悲观锁刚好相反,假定自己使用资源的时候没有人抢,所以不需要上锁。乐观锁的实现方案一般来说有两种:版本号机制 和 CAS实现 。下期可能会讲。

              在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

              二、synchronized 的使用方式

              场景具体分类锁对象代码示例
              修饰方法实例方法当前实例对象public synchronized void method () { ... }
              ...静态方法当前类的Class对象public static synchronized void method () { ... }
              修饰代码块代码块( )中配置的对象synchronized(object) { ... }

              三、synchronized 的实现原理列

              想知道原来先去底层看下,看看字节码是什么样子的,let's Go!

                private static Object lock = new Object();  public static synchronized void testSyn() {      System.out.println("香菜");  }  public synchronized void testSyn2() {      System.out.println("香菜");  }  public static void testObj() {      synchronized (lock) {          System.out.println("香菜");      }  }

              看下字节码:

              java多线程的核心知识点是什么

              可以看到synchronized 的地方使用的是monitorenter指令,每个对象都和一个monitor对象关联,主要用来控制互斥资源的访问,如果你想要加锁必须先获得monitor的批准,如果现在正有线程访问,会把申请的线程加入到等待队列。

              小结

              无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对class对象的锁,该类所有的对象同一把锁。2、每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。

              实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制,避免做嵌套synchronized 的使用。

              synchronized 要尽量控制范围,不能范围太大,否则会损失系统性能。

              四、线程池是什么

              线程池就是一个对象持有一堆线程,举个例子就是饿了么养的骑手团队。线程池就是这个团队,每个骑手都是一个线程。

              五、为什么要用线程池?

              假如现在商家有外卖单子,需要骑手去送单,这个时候的外卖任务就会派单给骑手,为什么要用线程池呐?

              有几个好处,第一就是骑手的招聘是有成本的,等你有了外卖订单再去招聘,来不及了,不如平常养一些骑手,线程的创建和销毁的开销是巨大的。

              第二就是不能一个单子来了就来一个骑手,这样的话骑手的数量很难控制,对于派单来说也存在很大的压力,会造成整个骑手团队的崩溃,对应的就是可以通过线程池控制系统内的线程数量,有效的避免大量的线程池争夺CPU资源而造成堵塞。

              第三如果养了一个骑手团队,这样在骑手的管理上可以规范,以便提供更好的外卖服务,比如这种外卖超时,骑手打星等。对比线程池就是线程池可以提供定时、定期、单线程、并发数控制等功能。

              六、看下类图,从整体上理解下

              java多线程的核心知识点是什么

              七、线程池的创建

              java多线程的核心知识点是什么

              线程池主要使用的四种

              固定数量的线程池(FixedThreadPool

              定时线程池(ScheduledThreadPool

              缓存线程池(CachedThreadPool

              单线程化线程池(SingleThreadExecutor

              八、线程池核心参数说明

              首先看下如何构造一个线程池

                public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {      return new ThreadPoolExecutor(nThreads, nThreads,                                    0L, TimeUnit.MILLISECONDS,                                    new LinkedBlockingQueue<Runnable>(),                                    threadFactory);      public ThreadPoolExecutor(int corePoolSize,                            int maximumPoolSize,                            long keepAliveTime,                            TimeUnit unit,                            BlockingQueue<Runnable> workQueue,                            ThreadFactory threadFactory,                            RejectedExecutionHandler handler)

              核心参数说明:

              java多线程的核心知识点是什么

              九、几个疑问点

              9.1、是怎么保证线程不销毁的?

              核心线程会阻塞等待workQueue

              9.2 提交任务有哪几种方式?

              java多线程的核心知识点是什么

              9.3 拒绝策略都有哪些?

              拒绝策略(handler)当线程池的线程数达到最大线程数时,需要执行拒绝策略。拒绝策略需要实现RejectedExecutionHandler接口,并实现rejectedExecution(Runnable r, ThreadPoolExecutor executor)方法。不过Executors框架已经为我们实现了4种拒绝策略:

              AbortPolicy(默认):丢弃任务并抛出RejectedExecutionException异常。

              CallerRunsPolicy:由调用线程处理该任务。

              DiscardPolicy:丢弃任务,但是不抛出异常。可以配合这种模式进行自定义的处理方式。

              DiscardOldestPolicy:丢弃队列最早的未处理任务,然后重新尝试执行任务。

              9.4 线程池的关闭

              关闭线程池可以调用shutdownNow和shutdown两个方法来实现

              shutdownNow:对正在执行的任务全部发出interrupt(),停止执行,对还未开始执行的任务全部取消,并且返回还没开始的任务列表。

              shutdown:当我们调用shutdown后,线程池将不再接受新的任务,但也不会去强制终止已经提交或者正在执行中的任务。

              9.5 初始化线程池时线程数的选择

              如果任务是IO密集型,一般线程数需要设置2倍CPU数以上,以此来尽量利用CPU资源。

              如果任务是CPU密集型,一般线程数量只需要设置CPU数加1即可,更多的线程数也只能增加上下文切换,不能增加CPU利用率。

              具体问题具体分析。

              十、总结

              线程池是项目中常用的,需要理解线程池的应用场景和构造函数,正确的使用线程池。

              到此,关于“java多线程的核心知识点是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

              --结束END--

              本文标题: java多线程的核心知识点是什么

              本文链接: https://www.lsjlt.com/news/298064.html(转载时请注明来源链接)

              有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

              本篇文章演示代码以及资料文档资料下载

              下载Word文档到电脑,方便收藏和打印~

              下载Word文档
              猜你喜欢
              • java多线程的核心知识点是什么
                这篇文章主要介绍“java多线程的核心知识点是什么”,在日常操作中,相信很多人在java多线程的核心知识点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java多线程的核心知识点是什么”的疑惑有所帮助!...
                99+
                2023-06-20
              • Java线程核心机制是什么
                这篇文章主要介绍“Java线程核心机制是什么”,在日常操作中,相信很多人在Java线程核心机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java线程核心机制是什么”的疑惑有所帮助!接下来,请跟着小编...
                99+
                2023-06-02
              • Java中的ClassLoader核心知识点有哪些
                这篇文章主要介绍“Java中的ClassLoader核心知识点有哪些”,在日常操作中,相信很多人在Java中的ClassLoader核心知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的C...
                99+
                2023-06-16
              • CSS的核心知识点总结
                这篇文章主要讲解了“CSS的核心知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS的核心知识点总结”吧!核心概念和知识点语法CSS 的核心功能是...
                99+
                2024-04-02
              • Java多线程知识点全面总结
                目录Java多线程知识点总结(1)什么是进程什么是线程?(2)多线程的运行状态(3)线程的创建和使用(4)Runnable 接口实现多线程(5)Callable接口实现多线程多线程常...
                99+
                2024-04-02
              • Java线型代数的核心是什么
                本篇内容介绍了“Java线型代数的核心是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!生活中的线性:超市结算我们想象一个只卖两个商品的超...
                99+
                2023-06-02
              • Java多线程基础知识点有哪些
                这篇文章主要为大家展示了“Java多线程基础知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java多线程基础知识点有哪些”这篇文章吧。一、线程什么是线程:线程是进程的一个实体,是CP...
                99+
                2023-06-25
              • Java中的重要核心知识点之继承详解
                目录一、继承1、概念2、语法3、父类成员的访问(1)子类中访问父类成员变量(2)子类中访问父类成员方法4、super关键字5、子类构造方法6、super和this7、代码块执行顺序8...
                99+
                2024-04-02
              • Linux知识点 -- Linux多线程(三)
                Linux知识点 – Linux多线程(三) 文章目录 Linux知识点 -- Linux多线程(三)一、线程同步1.概念理解2.条件变量3.使用条件变量进行线程同步 二、生产者消费者模型1.概念2.基于BlockingQueu...
                99+
                2023-08-30
                linux 运维 服务器
              • C#多线程的知识点有哪些
                这篇文章主要介绍“C#多线程的知识点有哪些”,在日常操作中,相信很多人在C#多线程的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#多线程的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
                99+
                2023-06-17
              • Java中的线程生命周期核心概念是什么
                本篇内容主要讲解“Java中的线程生命周期核心概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的线程生命周期核心概念是什么”吧!Java多线程在Java语言中,多线程是由线程的...
                99+
                2023-07-02
              • Java多线程的优缺点是什么
                Java多线程的优点包括:1. 提高程序的并发处理能力:多线程可以同时执行多个任务,提高程序的处理能力和运行效率。2. 提高系统资源...
                99+
                2023-09-15
                Java
              • Java中线程的知识点有哪些
                本篇内容介绍了“Java中线程的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1  .资源冲突,如果两个线程确实是在修...
                99+
                2023-06-17
              • Java线程池知识点有哪些
                这篇文章将为大家详细讲解有关Java线程池知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、线程数使用开发规约阿里巴巴开发手册中关于线程和线程池的使用有如下三条强制规约【强制】创建线程或线程池...
                99+
                2023-06-29
              • Java多线程之并发编程的核心AQS详解
                目录一、AQS简介1.1、AOS概念 1.2、AQS的核心思想1.3、AQS是自旋锁1.4、AQS支持两种资源分享的方式 二、AQS原理2.1、同步状态的管理2....
                99+
                2024-04-02
              • Java多线程的其他知识_动力节点Java学院整理
                一、线程组 ...
                99+
                2023-05-31
                java 多线程 知识
              • Java线程池必知必会知识点总结
                目录1、线程数使用开发规约2、 ThreadPoolExecutor源码1. 构造函数2.核心参数3.execute()方法3、线程池的工作流程4、Executors创建返回Thre...
                99+
                2024-04-02
              • Java中的内核线程是什么
                Java中的内核线程是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3...
                99+
                2023-06-07
              • Java线程池全面知识点总结
                本篇内容介绍了“Java线程池全面知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原理线程池的原理非常简单,这里用处理流程来概括:线...
                99+
                2023-06-25
              • Java中什么是内核线程
                这篇文章将为大家详细讲解有关Java中什么是内核线程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系...
                99+
                2023-06-14
              软考高级职称资格查询
              编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
              • 官方手机版

              • 微信公众号

              • 商务合作