
JUC
文章平均质量分 53
JUC学习内容
唥雨凊
一个努力学习的程序小白
展开
-
公平锁和非公平锁-ReentrantLock是如何实现公平、非公平的
公平锁和非公平锁-ReentrantLock是如何实现公平、非公平的 1、什么是公平锁与非公平锁 公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。 非公平锁:非公平锁则无法提供这个保障(先到的线程优先获取锁)。 2、ReentrantLock如何实现公平与非公平 Java并发包下面的ReentrantLock、ReadWriteLock默认都是非公平模式。 下面我们就来一起看看ReentrantLock是如何实现公平与非公平的。 ReentrantLock实现了Lock接口。提供了转载 2021-03-31 11:44:03 · 545 阅读 · 0 评论 -
java线程状态
Java线程的六种状态 NEW 初始状态,线程刚被构建,但是还没有调用start()方法 RUNNABLE 运行状态,Java系统系统中将操作系统中的就绪和运行两种状态笼统地称为“运行中” BLOCKED 阻塞状态,表示线程阻塞于锁 WAITTING 等待状态,表示线程进入等待状态,进入该状态表示当前线程做出一些特定动作(通知或者中断) TIME_WAITTING 超时等待状态,该状态不同于等待状态,它可以在指定的时间后自行返回 TERMINATED 中止状态,表示当前线程已经执行完毕 在Java中只有这六原创 2021-03-27 21:08:08 · 107 阅读 · 0 评论 -
JUC学习:CountDownLatch,CyclicBarrier,Semaphore
CountDownLatch&CyclicBarrier 从字面上理解,CountDown表示减法计数,Latch表示门闩的意思,计数为0的时候就可以打开门闩了。 CyclicBarrier表示循环的障碍物。两个类都含有这一个意思:对应的线程都完成工作之后再进行下一步动作,也就是大家都准备好之后再进行下一步。然而两者最大的区别是,进行下一步动作的动作实施者是不一样的。 这里的“动作实施者”有两种,一种是主线程(即执行main函数),另一种是执行任务的其他线程,后面叫这种线程为原创 2020-11-17 21:02:39 · 207 阅读 · 0 评论 -
JUC学习:阻塞队列
阻塞队列 在这篇博客中我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口),阻塞队列常用于线程池和生产者消费者的问题中 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。 一、认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图原创 2020-11-11 21:45:58 · 130 阅读 · 0 评论 -
JUC学习:函数式接口
JUC学习:函数式接口 jdk1.8 内置的函数式接口放在包 java.util.function 下,这种接口我个人感觉就是为了lambdas表达式简化代码而实现的。 这些接口,主要分4大类: Consumer(类似于消费者需要传入参数无返回值) Supplier(类似于生产者不需要传入参数,但有返回值) Function(有输入也有返回) Predicate(判断函数,有输入也有返回,返回true or false) 他们特点如下: 接口 参数类型 返回类型 方法 用途 Consum原创 2020-11-10 21:37:02 · 155 阅读 · 0 评论 -
反射的学习
反射 一、概述 1、概念 反射就是把Java的各种成分映射成相应的Java类。 Class类的构造方法是private,由JVM创建。 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。(来自Sun) J原创 2020-11-10 16:46:46 · 194 阅读 · 0 评论 -
JUC学习:单例模式
单例模式学习 Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。 单例模式有很多好处, 单例模式保证了 系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使 用单例模式可以提高系统性能 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用 new 单例模式 使用的场景:需要 频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资原创 2020-11-09 21:40:39 · 123 阅读 · 0 评论 -
JUC学习:synchronized
synchronized的学习 参考:https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453142528&idx=1&sn=34b26e408e1f8adcd8d8257522705171&scene=21#wechat_redirect synchronized关键字最主要的三种使用方式的总结 修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁 修饰静态方法,作用于当前类对象加原创 2020-11-08 20:49:00 · 279 阅读 · 0 评论 -
JUC学习:什么是线程安全
什么是线程安全? 其实线程安全指的也就是内存安全,操作系统里面会有很多进程,为了保证安全,操作系统会为这些进程分配各自的内存,每个进程就只能访问自己的那部分内存,而这个内存就叫堆内存。但每个进程里面可能又有许多的线程,为了安全也会为它们分配一个自己的内存,这个内存就叫栈内存。 而现实场景中不可能每个线程都只访问栈内存,有部分变量就需要放到一个公共空间里面,但如何保证这个公共空间资源的安全呢? 解决方案以下几种, 局部变量 直接放到每个线程的栈内存中 就是资源复制多几份给每个线程都能分到一份一样的资源,原创 2020-11-08 20:02:06 · 256 阅读 · 0 评论 -
JUC学习:Volatile
这里我看了:这篇blog 总结了一下知识点,上面讲的已经很全面了,我这就花了个图对它进行总结,也算是对这个知识点的一个记录原创 2020-11-06 22:10:48 · 89 阅读 · 0 评论 -
JUC学习:ThreadLocal
ThreadLocal的学习 ThreadLocal简介 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。 如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是Thread原创 2020-11-05 14:33:59 · 272 阅读 · 0 评论 -
JUC学习:java中的各种锁详细介绍
java中的各种锁详细介绍 转自:https://www.cnblogs.com/jyroy/p/11365935.html ,我在网上看到了一篇很好的blog来介绍锁的相关内容,在这记录下来以供后面自己学习 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方转载 2020-11-01 15:00:34 · 377 阅读 · 0 评论 -
线程学习1(小白自学)
多线程学习 什么是进程 当我们开启一个程序的时候就会开启一个进程 Win:可以直接打开任务管理器,查看进程 Linux:PS kill-9 在进程中至少开启一条一个线程,该线程就是主线程 进程就是所有线程的集合 什么是线程 线程就是程序执行的路径 在进程中开启一条线程执行我们的代码,程序执行的顺序必须遵循、从上往下的顺序 注意:如果开启了多线程代码的执行顺序就不是从上往下的顺序 什么是多线程 也就是在同一个进程中,开启了多条不同的执行执行路径,每条执行路径相互不影响,同时执行 多线程的好处 就是提高程序的执原创 2020-09-26 16:47:35 · 194 阅读 · 0 评论 -
JUC学习:线程池
java线程池学习 线程池原理的简单理解 线程池原理和银行办理业务差不多 线程池就像银行,有需求的时候给你安排窗口办理业务,人数多了就去等待队列去等待,如果哪个窗口的人办理完业务了,等待队列里面的人就会选择该窗口进行业务办理,(有空闲窗口就会从等待队列里面选取,不会直接从外面选取)如果等到队列都满了,还有人要办理业务,就会额外开一些窗口来继续办理业务,如果全部窗口都打开了,等待队伍也满了,还有需求需要办理的话,就会执行拒绝策略,拒绝后面的需求,并执行相应的策略 开放的窗口1,2,3相当于核心线程池数量,最大原创 2020-09-22 16:50:10 · 189 阅读 · 0 评论