java
文章平均质量分 77
CarryBest
java是世界上最好的语言
展开
-
Java对象结构
java对象结构(偏向锁、jvm、锁升级)java对象结构(偏向锁、jvm、锁升级)原创 2023-02-22 10:29:56 · 65 阅读 · 0 评论 -
使用MAT分析生产线上OOM问题
java线程池如何合理配置核心线程数java线程池如何合理配置核心线程数原创 2023-02-16 10:21:06 · 335 阅读 · 0 评论 -
手动实现自旋锁
实现自旋锁的方法主要是死循环+CAS,借鉴AtomicInteger原子类public final int getAndAddInt(Object var1, long var2, int var4) { int var5; do { var5 = this.getIntVolatile(var1, var2); } while(!this.compareAndSwapInt(var1, var2, var5, var5 + va...原创 2022-04-24 17:44:50 · 32 阅读 · 0 评论 -
java读写锁的作用
Java读写锁,也就是ReentrantReadWriteLock,其包含了读锁和写锁,其中读锁是可以多线程共享的,即共享锁,而写锁是排他锁,在更改时候不允许其他线程操作。读写锁底层是同一把锁(基于同一个AQS),所以会有同一时刻不允许读写锁共存的限制。解决读大于写的情况涉及并发问题,一般都有公共资源,俗称线程操纵资源类,新建资源(模拟缓存),缓存一般有3个方法,设置缓存、获取缓存、情况缓存。class MyCache { private static Map<String, .原创 2022-04-24 17:22:17 · 58 阅读 · 0 评论 -
生产环境消息相关解决方案(一致性、顺序行、可靠性问题)
消息一致性解决方案(去重、顺序、丢失问题)原创 2022-03-19 16:08:33 · 374 阅读 · 0 评论 -
java多线程(三)--------线程池
一:前言从上一篇我们了解到线程的创建和启动过程,如果我们进行debug到i=1(第二个线程的建立和启动),会发现,main线程组里已经没有了Thread-0这个线程,此时的thread[1]=Thread-1。看控制台也能看出来Thread-0已经运行完结束了,被销毁了我们如果需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念。和数据库连接池的理论一样,线程池的好处,就是可以方原创 2021-01-29 16:44:26 · 158 阅读 · 0 评论 -
java多线程(二)--------Thread源码
一:线程特性1、线程能被标记为守护线程,也可以是用户线程,标记为守护线程必须在start()方法之前调用2、每个线程均分配一个name,默认为(Thread-自增数字)的组合3、每个线程都有优先级.高优先级线程优先于低优先级线程执行. 1-10,默认为54、main所在的线程组为main,构造线程的时候没有现实的指定线程组,线程组默认和父线程一样,进入线程组main5、当线程中的run()方法代码里面又创建了一个新的线程对象时,新创建的线程优先级和父线程优先级一样6、当且仅当父线程为守护线程时原创 2021-01-29 16:44:11 · 254 阅读 · 0 评论 -
java多线程(一)--------简单实现
一:并发与并行并发: 是指同一个时间段内多个任务同时都在执行,并且都没有执行结束。强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行 。 比如你开车的时候,右手掌方向盘,过一会渴了拿杯子喝水,喝完又接着开车,在开车的同一个时间段内,你并发了。 并发的关键是你有处理多个任务的能力,不一定要同时。并行: 是说在单位时间内多个任务同时在执行 。 ...原创 2021-01-29 16:43:51 · 241 阅读 · 0 评论 -
HashMap源码
数组+链表+红黑树public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { private static final long serialVersionUID = 362498820763181265L; // 位运算 初始值1转成二进制左移四位是10000 为16 static fin...原创 2021-01-27 15:14:00 · 262 阅读 · 0 评论 -
java设计模式之-工厂模式(静态工厂-工厂方法-抽象工厂)
静态工厂模式(简单工厂模式): 优势: 1:构造器不同的第一优势在于,它们有名字,更容易知道想要表达的是啥,比如代理模式中生成代理类就是用的静态工厂方法Proxy.newProxyInstance 2:不用每次被调用时都创建新对象,减少内存开销,单例的写法也大都是用静态工厂方法来实现的 3:可以返回原返回类型的子类 4:可以有多个参数相同但名称不同的工厂方法 ...原创 2021-01-25 14:41:03 · 414 阅读 · 0 评论 -
java设计模式之-单例模式
定义 一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例 单例模式的优点和缺点 单例模式的优点: 1:单例模式可以保证内存里只有一个实例,减少了内存的开销。 2:可以避免对资源的多重占用。 3:单例模式设置全局访问点,可以优化和共享资源的访问。 单例模式的缺点: ...原创 2021-01-25 14:43:39 · 132 阅读 · 0 评论 -
java常用设计模式
设计模式3个分类创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。 单例模式:某个类只能有一个实例,提供一个全局的访问点。简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。抽象工厂:创建相关或依赖对象的家族,而无需明确指定具体类。建造者模式:封装一个复杂对象的构建过程,并可以按步骤构造。原型模式:通过复制现有的实例来...原创 2021-01-25 14:42:31 · 129 阅读 · 1 评论 -
JDK动态代理源码解析
本文不过多解释多余无用的理论,带着如何简单的理解代理进行讨论。本文所用jdk为1.8版本。关于动态代理的使用1:创建接口及实现类2:实现代理处理器:实现 InvokationHandler ,实现 invoke(Proxy proxy,Method method,Object[] args) 方法3:通过 Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 获得代理类...原创 2021-01-25 14:43:59 · 431 阅读 · 0 评论 -
java设计模式之-代理模式
什么是动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。通过Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 获得代理类。那么我们想在生成代理类之前我们想要干啥?即代理谁去做事?需要做什么事?如果还不理解那么大家都租过房子吧,租房子需要找中介的人,让中介帮你找房子,(租房子的人是个接口,这里的人不具体指哪一个,而是指所有想租房子的人原创 2021-01-25 14:44:23 · 151 阅读 · 0 评论 -
JAVA中多态的理解简单易懂
多态的实现必须有三个条件1:必须要有继承2:必须要有重写3:子类引用指向父类对象上面三个条件缺一不可假设现在有一个父类Animal,这里为了方便,使用抽象类,Animal有唱歌、散步这两个方法,应该所有的动物都有这两个动作吧!public abstract class Animal(){ public abstract void sing();原创 2017-05-16 14:44:09 · 674 阅读 · 0 评论