易雪寒
永远做更好的自己!
展开
-
CountDownLatch的介绍和使用
1、类介绍java.util.concurrent.CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。...原创 2021-06-18 02:50:52 · 358 阅读 · 0 评论 -
Java8-ThreadLocal的Lambda构造方式:withInitial
Java8中ThreadLocal对象提供了一个Lambda构造方式,实现了非常简洁的构造方法:withInitial。这个方法采用Lambda方式传入实现了 Supplier 函数接口的参数。写法如下:原创 2021-06-10 02:41:36 · 1116 阅读 · 0 评论 -
线程池原理及调度过程
1.关于线程池线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。例如Android中常见到的很多通用组件一般都离不开”池”的概念,如各种图片加载库,网络.转载 2020-08-13 17:19:13 · 521 阅读 · 0 评论 -
高并发,你真的理解透彻了吗?
高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等转载 2020-06-27 17:30:21 · 647 阅读 · 0 评论 -
深入浅出多线程之线程创立四种方式(二)
1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口)2.实现Runnable接口,重写run方法3.实现Callable接口,重写call方法(有返回值)4.使用线程池(有返回值)1.继承Thread类,重写run方法 每次创建一个新的线程,都要新建一个Thread子类的对象 启动线程,new Thread子类().start() 创建线程实际调用的是父类Thread空参的构造器public class MyThread {原创 2020-06-07 00:49:54 · 146 阅读 · 0 评论 -
深入浅出多线程之基本概念(一)
概念和历史通俗的讲,多线程可以理解为程序运行的时候齐头并进的效果。一般的java程序在主线程启动之后,cpu的资源就是单纯为这个主线程来准备的(除去垃圾回收线程和其他的守护线程外),而多线程就不一样了。因为线程和主线程之间在资源上是竞争关系,所以cpu的资源会被所有的线程共享。有人可能会问,这样有什么用呢?当然有用,这样可以充分利用cpu的使用率。由于现在的服务器都是多核cpu,某个cpu在处理一件事的时候,其他的cpu都是空闲的。既然如此,我们就可以使用多线程来利用这些空闲的cpu去做一些别的工作原创 2020-06-07 00:11:29 · 228 阅读 · 0 评论