多线程
文章平均质量分 86
cb414
这个作者很懒,什么都没留下…
展开
-
Java多线程(8)----Executor框架
本文中涉及一些与线程池相关的概念,可以先看这个在中,使用线程来异步执行任务。如果为每一个任务都分配一个新线程来执行,这些线程的创建与销毁都将会消耗大量的计算资源。这种策略可能会使处于高负荷状态的应用最终崩溃的线程既是工作单元,也是执行机制。从JDK5开始,把工作单元与工作机制分离开来:工作单元分为和,执行机制则由框架提供。在虚拟机的线程模型中,线程会被一对一映射为本地操作系统线程。线程启动时会创建一个本地操作线程;线程终止时,这个操作系统线程也会被回收,通常操作系统会调度所有线程并将它们分配给可用的。而在上原创 2022-07-07 20:36:37 · 601 阅读 · 1 评论 -
Java多线程(2)-----浅谈volatile关键字
1,前言volatile常被提及的便是其内存可见性以及禁止指令重排序在计算机中,软件技术和硬件技术有一个共同的目标:在不改变程序执行结果的前提下,尽可能提高并行度。2,volatile2.1,内存模型既然是多线程,那么就离不开一个点:消息传递线程之间的通信机制有两种:共享内存消息传递Java内存模型(JMM)使用的正是共享内存的方式。共享内存在共享内存的模型中,多个线程之间共享程序的公共状态,通过读-写内存中的公共状态进行隐式通信正因为这是一种隐式的通信,才会给程序员进行原创 2022-04-05 22:18:59 · 583 阅读 · 0 评论 -
Java多线程(7)----浅谈线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。线程池能带来的好处:当提交一个新的任务到线程池后,线程池的处理流程如下:值得注意的是,当线程池中的线程数大于等于,线程池也就完成了预热,之后再进来新任务,几乎所有的任务都是执行步骤3【大致流程可以理解为:优先让核心线程池的线程数达到充盈,借助新起的其他工作线程来辅助完成额外的任务】流程示意图如下:工作线程:线程池创建线程时,会将线程封装成工作线程, 在执行完 任务后,还会循环获取工作队列里的任务来执行。线程原创 2022-06-26 15:32:38 · 480 阅读 · 0 评论 -
Java多线程(6)----浅谈13个原子操作类
Java从JDK5开始提供了包,包中的原子操作类提供一种用法简单、性能高效、线程安全地更新一个变量的方式。因为变量的类型有很多种,所以在包一共提供了13个类,属于4种类型的原子更新方式,分别是:包里的类基本都是使用实现的包装类值得一提的是,以其内部用于存储目标整数值的变量是用进行修饰的2,原子操作类2.1,原子更新基本类型:原子更新布尔类型:原子更新整形:原子更新长整型三个类提供的方法几乎一模一样,所以以为例包提供了3种基本类型的原子更新,以源码为例:可以发现它是先把转为整型,在使用进行C原创 2022-06-25 17:00:08 · 411 阅读 · 4 评论 -
Java多线程(5)----浅谈读写锁
是一个排他锁,这种锁在同一时刻只允许一个线程进行访问。在实际生产中,多个线程同时读一个资源是不会产生并发问题的读写锁在同一时刻可以允许多个线程访问,但是在写线程访问时,所有的读线程和其他写线程均会被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁来提高性能。读写锁是通过分离读锁与写锁,以实现共享读和独占写那么同步状态的设计是一个问题。读写锁使用整型变量来维护多个读线程和一个写线程的状态读写锁将变量切分成了两个部分,用高16为表示读,低16位表示写因为读写锁是一个可重入锁,所以这里的读状态统计原创 2022-06-24 17:22:45 · 289 阅读 · 0 评论 -
Java多线程(4)----浅谈重入锁
重入锁,顾名思义就是支持重进入的锁:它表示该锁能够支持一个线程对资源的重复加锁。初次之外,该锁还支持获取锁时的公平和非公平选择重进入是指任意线程在获取锁之后能够再次获取该锁而不会被锁阻塞,该特性的实现需要解决以下两个问题:是通过AQS实现自定义同步器来实现锁的获取和释放,以非公平性实现为例,其源代码如下:该方法增加了再次获取同步获取同步状态的逻辑:即当判断如果该锁已经被获取之后,在下一个分支中,判断试图获取的线程是否是持有锁的线程!同样的,每当线程重复获取该锁,就会有相应的释放锁的动作,下面是的如果该原创 2022-06-23 18:04:11 · 117 阅读 · 0 评论 -
Java多线程(3)----浅谈队列同步器(AQS)
浅谈队列同步器AQS原创 2022-05-24 15:41:48 · 246 阅读 · 0 评论 -
Java多线程(1)----浅谈锁升级
1,锁升级1.1,前言我们都知道在Java多线程编程中,synchronized一直是一个重量级的角色。而Java中每一个对象都可以作为锁,具体的使用方式:用于修饰普通同步方法时,锁是当前实例对象用于修饰静态同步方法时,锁是当前的Class对象用于修饰代码块的时候,锁是synchronized括号中配置的对象tips:记住锁是哪些对象!!!当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁到底存在哪里呢?锁里面会存储什么信息呢?对于方法同步和代码原创 2022-04-04 22:48:39 · 436 阅读 · 0 评论