9 EmineWang

尚未进行身份认证

我要认证

九层之台始于垒土

等级
TA的排名 5k+

interrupt(),interrupted,isInterrupted的区别

1、interrupt()interrupt() 方法用于中断线程,调用该方法的线程

2020-09-04 14:54:57

进程之间的通信方式

进程间通信方式一般有以下几种:1、管道,匿名管道,命名管道2、信号3、信号量4、消息队列5、共享内存6、socket管道管道数据只能单向流动,所以如果要实现双向通信,就要创建2个管道管道分为匿名管道和命名管道匿名管道只能在父子进程关系之间使用命名管道,可以在不关联的两个进程之间使用,因为它创建了一个类型为管道的设备文件,使用这个设备文件就可以通信。管道只能承载无格式的字节流信号信号是进程之间唯一的异步通信机制,信号的主要来源主要有硬件来源(入键盘操作ctrl + C)

2020-09-03 17:19:07

限流——漏桶算法和令牌桶算法的区别

限流在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存:缓存的目的是提升系统访问速度和增大系统处理能力降级:当服务流量剧增,影响到核心流程的性能,需要暂时屏蔽掉一些功能,待高峰过去或问题解决后再重新打开,以此释放服务器资源以保证核心任务的正常运行。限流:限流的目的是通过对并发访问或请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、或排队或等待、降级等处理常用的限流算法有令牌桶和,漏桶,滑动窗口漏桶算法漏桶(Leaky Bucket) 算

2020-09-02 18:08:20

Semaphore的使用并实现的限流器

semaphore 基本原理semaphore 翻译成字面意思是信号量,Semaphore可以控制同时访问的线程个数,通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可。从功能看semaphore的底层是基于AQS实现的一个共享锁,需要多个现场共享一个令牌池。创建semaphore实例的时候,需要一个参数permits,这个基本可以确定是设置给AQS的state的,然后每一个线程调用的acquire的时候,执行state = state-1,release的时候执行s

2020-09-01 16:48:25

CountDownLatch和CyclicBarrier

countDownLatch是一个同步工具类,允许一个线程或者多个线程同时等待,直到其他线程的操作完毕再执行。coutDownLatch提供了2个方法,一个是countDown,一个是await,countDownlatch初始化的时候,会传入一个整数,赋值给内部计数器state,调用await方法会阻塞当前线程,并将当前线程加入到等到队列中,直到state等于0或者当前线程被中断,调用countDown方法,会使state的值减一,如果state等于0则唤醒等待队列中的线程。适应场景:1、场景一:在

2020-08-31 18:12:58

HashMap1.7和1.8小结

JDK1.7中的HashMapJDK1.7中的HashMap是一个数据与链表的结合体。底层是一个数组结构,数组中的每一项都是一个链表,当新建一个HashMap的时候,就会初始化一个数组。结构大致如下hashmap的成员变量1.DEFAULT_INITIAL_CAPACITY = 1 << 4;:初始桶(数组)大小为16,因为底层是数组,所以也是数组大小2.MAXIMUM_CAPACITY = 1 << 30:桶最大值,2的30次方3.DEFAULT_LOAD_FACTO

2020-08-28 17:09:33

condition实现生产者和消费者

生产者import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;public class ConditionProducer implements Runnable { private Lock lock; private Condition condition; p

2020-08-25 16:58:50

AQS实现原理

在上一篇中我们讲解了synchronized,在jdk1.6之前,synchronized这个重量级锁性能一直较为低下,在1.6之后,进行了大量的锁的优化,如偏向锁、自旋锁等,但是与Lock相比,synchronized还是存在一下缺陷,缺少了获取锁和释放锁的可操作性,可中断、超时获取锁,且他为独占式在高并发场景下性能大大折扣。使用Lock必然离不开核心组件AQS什么是AQSAQS(AbstractQueuedSynchronizer),即队列同步器,它是构建锁或者其他同步组件的基础框架,如Reent

2020-08-18 18:00:29

锁对象、偏向锁、轻量级锁、重量级锁

锁对象在java中任何一个对象都能成为锁对象,java对象在内存中的存储结构主要有以下三个部分:1、对象头2、实例数据3、填充数据对象头的数据主要是一些运行时的数据,其简单结构如下长度内存说明32/64bitmark wordhashcode,GC分代年龄,锁信息32/64bitclass metadata address指向对象类型数据的指针32/64bitarray Length数组的长度(当对象为数组时候)从上面可以看出锁的信息是存储在对

2020-08-06 16:12:49

QPS,并发数计算

PV=page viewTPS=transactions per secondQPS=queries per secondRPS=requests per secondRPS=并发数/平均响应时间QPS = req/sec = 请求数/秒【QPS计算PV和机器的方式】QPS统计方式 [一般使用 http_load 进行统计]QPS = 总请求数 / ( 进程总数 * 请求时间 )QPS: 单个进程每秒请求服务器的成功次数服务器计算服务器数量 = ceil( 每天总PV / 单台服务器每

2020-08-04 18:19:05

@Scope(BeanDefination.SCOPE_PROTOTYPE)

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。举例说明:@Component@Scope(BeanDefinition.SCOPE_PROTOTYPE

2020-05-26 11:44:33

springboot同时配置多个MQ

配置2个数据源:application.properties# 第一个mqspring.rabbitmq.first.host=${mq.host}spring.rabbitmq.first.port=${mq.port}spring.rabbitmq.first.username=${mq.username}spring.rabbitmq.first.password=${mq.password}spring.rabbitmq.first.virtualHost=${mq.vhost}#

2020-05-25 18:05:35

wait为什么要放在同步块中

且看下面一段不加锁的代码:public class WaitTest3 { public static void main(String[] args) { final String obj = "xx"; final Thread t1 = new Thread("t1") { @Override p...

2019-12-02 17:32:37

wait/notify,notifyAll

wait之后,持有对象锁的线程 A会释放当前锁,释放 cpu 资源进入waiting状态.notify :表示持有对象锁的线程A 会释放当前锁,通知JVM唤醒某个竞争改对象锁线程的线程X,线程A的Synchronized代码块执行完并释放了锁之后,线程X获得对象锁的权限,其他竞争线程继续等待。(即使线程X执行完毕,释放了对象锁,其他竞争线程仍然等待,直至有新的notify或者notify...

2019-12-02 17:23:54

JVM类加载过程

JVM类加载分为5个过程:加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载加载:将.class文件(并不一定是.class。可以是ZIP包,网络中获取)中的二进制字节流读入到JVM中连接: 连接分三步: 验证 准备 解析验证: 验证主要确保加载进来的字节流符合JVM规范准备:为静态变量在方法区分配内存,并设置默认初始值!解析...

2019-11-13 14:45:41

命令模式

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令模式通过这种封装的方式实现将客户端和接收端解耦。命令模式的几个角色:抽象命令接口Command:定义命令的接口,声明执行的方法具体命令实现,持有接受者对象,完成具体命令命令接受者对象Receiver:真正执行命令的角色命了传递者Invoker:持有命令对象,要求命令对象执行请...

2019-11-12 20:17:24

建造者模式

建造者模式:建造者模式能够将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。比如制造一个手机,都有统一组件标准,都包含屏幕、电池、机身,可以将制作部件过程进行抽象出来,具体实现交给具体产品。定义手机属性@Data@ToStringpublic class MobilePhone { // 手机屏幕 private String screen;...

2019-11-12 19:47:48

常用设计模式对比

23种设计模式:分类设计模式创建型工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、 建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)结构型适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、 装饰器模式(Decorator)、门面模式(Fa...

2019-11-12 18:01:35

观察者模式

观察者模式:观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同 时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通 知并更新,属于行为型模式。观察者模式有时也叫做发布订阅模式。观察者模式主要用 于在关联行为之间建立一套触发机制的场景。观察者模式在现实生活应用也非常广泛, 比如:微信朋友圈动态通知结合案例,学生在教育系统提...

2019-11-12 17:46:48

装饰者模式

装饰者模式装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对 象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式例如,平时买煎饼,普通煎饼,可以加鸡蛋,加香肠定义食物顶层接口public interface Food { String make();}定义一个基本煎饼,无添加publi...

2019-11-12 17:09:47

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。