
Java
厚德.
这个作者很懒,什么都没留下…
展开
-
HashMap 1.8源码
源码是以1.8的进行分析的:这是JDK1.8HashMap的数据结构数组,链表(如果key的Hash相同),红黑树(当table的length>=64,在链表上相同key的数量>=7就开始使用红黑树)Map<String,String> map = new HashMap();map.put("hello","world");map.get("hello");//这是默认的构造方法,就是设置了一个默认的构建因子DEFAULT_LOAD_FACTOR =原创 2020-11-23 15:08:54 · 274 阅读 · 1 评论 -
并发编程之worker-thread design pattern
基本内容是:有一个流水线(channel),流水线一端有客户线程client,另一端有工人线程worker,客户不断把新的任务(request)放入流水线,工人在另一头获得任务,并执行,客户和工人的数量可多可少,就这么简单这个所谓的pattern初看好像似曾相识,就是一个thread pool嘛, 按通常的做法,request可以实现Runnable接口,把要做的事情放在run方法中,由work...原创 2019-07-20 14:05:31 · 318 阅读 · 0 评论 -
并发编程之Two-Phase Termination design pattern (二阶段终结线程)
程序分为两部分,一部分是功能操作,一部分为结束操作(释放资源)。Two-phase Termination直译的话是“两相终止”,不过就这个模式而言,该译作“两阶段终止”比较适当,想像您有一个执行程序正在周期性的运作,在“运作阶段”您送出了停止执行程序的请求,这时候执行程序不该慌张的马上终止目前的工作,而是先完成这一次周期的工作,然后进入“善后阶段”完成一些善后的工作,例如关闭档案或网路串流,所...原创 2019-07-20 14:03:58 · 432 阅读 · 0 评论 -
并发编程之Thread-pre-message design pattern
Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。例如:电话接线员一样,收到的每一个电话投诉或者业务处理请求,都会提交对应的工单,然后交由对应的工作人员来处理。一个请求过来,就会有一个线程为当前请求服务模式特点1.提高响应性,缩短延迟时间当handle方法操作非常耗时的时候可以使用该模式。如果handle...原创 2019-07-20 14:02:35 · 262 阅读 · 0 评论 -
并发编程之CountDownLatch
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。其实用Thread的join方法也是可以等到线程执行完之后,再去执行后面的代码。CountDownLatch实现线程等待,直到子线程执行完毕,主线程才往下执行。public class CountDownTest { public static void main(Strin...原创 2019-07-20 14:01:07 · 259 阅读 · 0 评论 -
并发编程之生产者消费者设计模式
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用生产者和消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消...原创 2019-07-20 13:56:10 · 624 阅读 · 0 评论 -
并发编程之ThreadLocal
线程安全保险箱 ThreadLocal(现在ThreadLocal用的Map保存数据(ThreadLocalMap),在以前版本用的是一个数组去保存,一个保存key,后一个保存value,现在改变了存储方式)它是线程的局部变量,这些变量只能在这个线程内被读写,在其他线程内是无法访问的。 ThreadLocal 定义的通常是与线程关联的私有静态字段ThreadLocal使用以当前线程作为Key...原创 2019-07-20 13:52:12 · 136 阅读 · 0 评论 -
并发编程之Guarded Suspension模式
1、Guarded Suspension意为暂停保护,其核心思想是仅当服务进程准备好时,才提供服务。设想一种场景,服务器可能会在很短时间内承受大量的客户端请求,客户端请求的数量可能超过服务器本身的即时处理能力,而服务端程序又不能丢弃任何一个客户请求。此时,最佳的处理方案莫过于让客户端要求进行排队,由服务端程序一个接一个处理。这样,既保证了所有的客户端请求均不丢失,同时也避免了服务器由于同时处理太多...原创 2019-07-20 13:50:21 · 424 阅读 · 0 评论 -
并发编程之Future设计模式 (未来设计模式)
通过子线程完成任务,调用之后直接返回,主线程继续下面的任务,等到子线程完成任务进行回调通知。Future 用来代表未来的一个凭据FutureTask 执行的任务逻辑FutureService 桥接 Future和FutureTask用于理解的实例:早上10点去蛋糕店定做一个蛋糕,交完钱蛋糕店提供一个收据,凭借收据进行蛋糕的领取,做蛋糕需要时间,店员让你下午3点去拿蛋糕。串行:一...原创 2019-07-20 13:48:53 · 676 阅读 · 0 评论 -
并发编程之读写锁设计模式(ReadWriteLock design pattern or Reader-Writer design pattern)
在进行读写操作的时候,读是可以并发的,但是写是不可以的,只能串行 READER WRITER READER YES NO WRITER NO NO 这种方式是把读操作放开,提高线程执行速度,把写操作添加同步代码块,保证顺序性原子性。public class ReadWriteLock { private int readi...原创 2019-07-20 13:45:37 · 505 阅读 · 0 评论 -
多线程设计模式之单线程执行设计模式(有一个门,始终只能一个人通过)
在我们的业务开发中,在多线程的情况下始终会有资源的公用,就是共享资源的使用,这个时候我们怎么保证线程的安全性呢?我们模拟一个场景:多个游客要验证身份通过一道门三个类:1.User 是使用资源的地方,也就是每一个用户,或者说是通过门的游客2.Gate:相当于一个资源 调用一个方法pass 方法3.SingleClient 当User跑起来的时候不断的使用这个资源public class ...原创 2019-07-20 13:38:15 · 373 阅读 · 0 评论 -
ClassLoader简介
一、概念JVM退出的方式:System.exit(0);程序正常结束crash程序运行过程中出现error或者exception操作系统的问题1.2类加载的三个阶段:(1) 装载:简单的说,类加载阶段就是由类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Clas...原创 2019-07-20 13:20:57 · 180 阅读 · 0 评论 -
Java单例的七种实现
1.饿汉式/** * 饿汉式 */public class SingleObject1 { private static final SingleObject1 instance = new SingleObject1(); private SingleObject1(){} //不能进行懒加载,直接创建对象,会占用内存 public static Sin...原创 2019-06-17 11:05:30 · 131 阅读 · 0 评论