
Java多线程;JUC
文章平均质量分 92
多线程,并发,JUC
MinggeQingchun
这个作者很懒,什么都没留下…
展开
-
Java - 异步处理
Async注解是基础Spring的AOP动态代理模式实现的,同类中的A方法并没有走Spring的代理类,调用同类中的B方法是原生的并不是Spring所代理的对象,因为并没有经过Spring容器托管,从而造成了注解的失效。异步处理的实现方式有很多种,常见多线程,消息中间件,发布订阅的广播模式,其根据逻辑在于先把请求承接下来,放入容器中,在从容器中把请求取出,统一调度处理。异步适用的业务场景,对数据强一致性的要求不高,异步处理的数据更多时候追求的是最终一致性。5、异步用在不同服务间,可以隔离服务,避免雪崩;原创 2023-01-07 22:44:19 · 8876 阅读 · 0 评论 -
Java--多线程之synchronized和lock
1、synchronizedsynchronized表示当前线程,独占 对象 someObject当前线程独占了对象someObject,如果有其他线程试图占有对象someObject,就会等待,直到当前线程释放对someObject的占用。someObject 又叫同步对象,所有的对象,都可以作为同步对象为了达到同步的效果,必须使用同一个同步对象释放同步对象的方式: synchronized 块自然结束,或者有异常抛出package MultiThread;import java..原创 2020-09-17 15:34:56 · 319 阅读 · 2 评论 -
Java--多线程之并发,并行,进程,线程(一)
以下对并发、并行、进程、线程的理解引自 阿里巴巴技术专家HollisJava并发编程一、并发并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。无论是Windows、Linux还是MacOS等其实都是多用户多任务分时操作系统。使用这些操作系统的用户是可以“同时”干多件事的二、并行并行(Parallel),当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进.原创 2022-03-12 20:40:50 · 3082 阅读 · 0 评论 -
Java--多线程之终止/中断线程(二)
Java 中有以3 种方法可以终止正在运行的线程:1、使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止2、使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用3、使用 interrupt() 方法中断线程(只是中断线程执行,终止线程的睡眠(唤醒),并未终止线程)1、标志位定义一个boolean型的标志位,在线程的run方法中根据这个标志位是true还是false来判断是否退出/** * 使用标志位终止线程 * */public c原创 2022-03-13 16:01:32 · 3335 阅读 · 0 评论 -
Java--多线程之join,yield,sleep;线程优先级;定时器;守护线程(三)
但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;join()方法是Thread 类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行。yield()方法的作用是放弃当前的cpu的资源,将他让给其他的任务去占用cpu执行时间。3、Thread.sleep()方法,可以做到间隔特定的时间,去执行一段特定的代码,每隔多久执行一次。其中具有代表性的就是:垃圾回收线程(守护线程)原创 2022-10-11 22:11:10 · 1022 阅读 · 0 评论 -
Java--多线程之生产者消费者模式;线程池ExecutorService(五)
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦,如工厂模式的第三者是工厂类,模板模式的第三者是模板类在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。原创 2022-10-12 13:20:00 · 2259 阅读 · 0 评论 -
JUC - 多线程之Synchronized和Lock锁;生产者消费者模式(一)
JUC首先,再简单说一下并行、并发;进程、线程。原创 2022-10-17 22:09:41 · 639 阅读 · 0 评论 -
JUC - 多线程之Callable;集合类线程不安全(二)
Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类设计的。然而Runnable不返回结果,也不能抛出被检查的异常Callable是创建线程的第三种方式,是一个函数式接口使用Callable接口创建线程时,发现Thread中构造方法并没有Callable参数但是Java中提供了一实现Runnable接口的实现类1、Future接口2、FutureTask类。原创 2022-10-19 21:19:52 · 812 阅读 · 0 评论 -
JUC - 多线程之同步辅助CountDownLatch,CyclicBarrier,Semaphore(三)
CountDownLatch的作用:就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以输出如下main线程一直阻塞直到所有的线程执行结束。原创 2022-10-20 20:59:26 · 417 阅读 · 0 评论 -
JUC - 多线程之线程池ThreadPoolExecutor(五)
创建线程和销毁线程的花销也是比较大的(手动new Thread 类),创建和消耗线程的时间有可能比处理业务的时间还要长。3、提升系统响应速度,假如创建线程用的时间为T1,执行任务用的时间为T2,销毁线程用的时间为T3,那么使用线程池就免去了T1和T3的时间。1、提高效率,创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一个,这要比需要的时候创建一个线程对象要快的多。2、减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。创建Java线程需要给线程分配。原创 2022-10-21 11:32:07 · 442 阅读 · 0 评论 -
JUC - 多线程之ForkJoin;异步调用CompletableFuture(六)
ForkJoin是在Java7提供的一个用于并行执行任务的框架,ForkJoin 从字面上看Fork是分岔的意思,Join是结合的意思,核心思想就是其实现思想与MapReduce有异曲同工之妙ForkJoin体系中最为关键的就是ForkJoinTask和ForkJoinPool,ForkJoin就是利用分治的思想将大的任务按照一定规则Fork拆分成小任务,再通过Join聚合起来ForkJoin最经典的一个应用就是Java8中的,我们知道Stream分为,其中并行流。原创 2022-10-22 15:33:20 · 1372 阅读 · 0 评论 -
JUC - 多线程之JMM;volatile(七)
Java Memory Model(JMM)Java内存模型,区别与java内存结构。JMM定义了一套在多线程读写共享数据(变量、数组)时,对数据的可见性、有序性和原子性的规则和保障。原创 2022-10-22 23:15:26 · 447 阅读 · 0 评论 -
JUC - 多线程之 CAS和原子类(九)
比较和交换;体现的是一种乐观锁的思想CAS 用于实现多线程同步的原子指令。它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。这是作为单个原子操作完成的。原子性保证新值基于最新信息计算;如果该值在同一时间被另一个线程更新,则写入将失败。操作结果必须说明是否进行替换;这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)原创 2022-10-24 21:23:39 · 694 阅读 · 0 评论 -
Java--多线程之synchronized和lock;死锁(四)
在了解synchronized之前,我们先看一个线程不安全的示例如一个账户中有1万块钱,两个人同时取钱,会导致余额不对,或者取的钱比账户中金额还多输出如下t1和t2线程分别在同一个总金额为1万的账户取款 5千,然余额还是5千,这就导致了多线程并发下数据不安全的情况。原创 2022-10-12 13:19:45 · 1371 阅读 · 0 评论 -
JUC - 多线程之阻塞队列BlockingQueue(四)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端 (front) 进行删除操作,而在表的后端 (rear) 进行插入操作。和栈一样,队列是一种操作受限制的线性表,进行插入操作的端称为队尾,,进行删除操作的端称为对头.在队列中插入一个队列元素称为入队, 从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故。原创 2022-10-20 22:14:12 · 470 阅读 · 0 评论 -
JUC - 多线程之 单例模式(八)
单例模式(Singleton Pattern)是一种非常简单的设计模式之一,当我们使用的对象要在全局唯一时就需要用到该模式,以保证对象的唯一性。除此之外,还能避免反复的实例化对象,减少内存开销单例类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象单例主要有如下创建方式优点:写法简单;避免了线程同步问题缺点:在类装载的时候就完成实例化,没有达到Lazy Loading懒加载的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费 优缺点同上 优点:在使用时才会生成对象原创 2022-10-24 12:00:34 · 435 阅读 · 0 评论 -
Java--多线程Thread(实现,并发并行,同步死锁,单例,线程组池)
一、线程线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作二、多线程并行和并发的区别 1、并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU) 2、并发是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行, 由于时间间隔较短,使人感觉两个原创 2017-03-12 14:52:22 · 3235 阅读 · 1 评论 -
JUC - 多线程之悲观锁、乐观锁,读写锁(共享锁、独享锁),公平非公平锁,可重入锁,自旋锁,死锁(十)
读写锁是一种技术: 通过类来实现为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由 JVM自己控制的读锁(共享锁)允许多个线程获取读锁写锁(独享所)只允许一个线程获取写锁:也叫读锁,可以查看数据,但是不能修改和删除的一种数据锁,加锁后其他的用户可以并发读取,但不能修改、增加、删除数据,该锁可被多个线程持有,用于资源数据共享。原创 2022-10-25 20:55:11 · 1770 阅读 · 0 评论