标签 - java

java 线程    2021-11-02 09:14:36    24    0    0
死锁 两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,无外力作用将互相等待下去 发生必要条件 互斥条件 请求和保持条件 不剥夺条件 环路等待条件 发生死锁代码 package com.csyd.concurrency.example.deadLock;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class DeadLock implements Runnable{ public int flag = 1; private static Object o1 = new Object(),
java 线程    2021-11-01 10:57:17    30    0    0
对比Thread和线程池 new Thread 弊端 每次 new Thread 新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或OOM 缺少更多功能,如更多执行、定期执行、线程中断 线程池的好处 重用存在的线程,减少对象创建、消亡的开销,性能佳 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞 提供定时执行,定期执行,单线程,并发数控制等功能 线程池-ThreadPoolExecutor(构造) corePoolSize:核心线程数量 maximumPoolSize:线程最大
java 线程    2021-10-25 13:03:00    30    0    0
组件: CountDownLatch 可以阻塞当前线程,同时只能有一个线程操作该计数器 代码用例 package com.csyd.concurrency.example.aqs;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;@Slf4jpublic class CountDownLatchExamp
java 线程    2021-10-12 17:18:03    47    0    0
发布对象 发布对象:使一个对象能被当前范围之外的代码所使用 对象逸出:一种错误的发布。当一个对象还没有构造完成时,就使它被其他线程所见 安全发布对象 四种方法 在静态初始化函数中初始化一个对象引用 将对象的引用保存到volatile类型域或者AtomicReference对象中 将对象的引用保存到某个正确构造对象的final类型域中 将对象的引用保存到一个由锁保护的域中 单例模式举例 懒汉模式 package com.csyd.concurrency.example.singleton;import com.csyd.concurrency.anno
java 线程    2021-10-12 16:01:21    37    0    0
线程安全 代码所在的进程有多个线程在同时运行,这些线程可能同时在运行同一段代码,如果每次运行结果和单线程运行一致,而且其他变量的值也和预期是一样的,则是线程安全的 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据,造成所得到的数据是脏数据,也可能是计算时出现错误 并发模拟 Postman : Http请求模拟工具 Apache Bench(AB) : Apache附带的工具,测试网站性能 JMeter : Apache组织开发的压力测试工具 代码 : Semaphore、CountDownLatch等 这些模拟工具中,JMeter是最方便实用的,推荐学
java 线程    2021-09-24 18:10:14    47    0    0
cpu的缓存介绍 cpu多级缓存(MESI缓存一致性) cpu频率太快,主存跟不上,就需要缓存处理 M : 修改,被修改过的,与主存不一致,未来需要写回主存 E : 独享,未被修改过,与主存的数据一致,任何时刻cpu读取内存时,允许变成S状态分享,修改时会变成M状态 S : 共享,与主存中一致,当修改后,可以变成I状态无效 I : 失效,有其他cpu修改了该缓存行 cpu多级缓存-乱序优化 cpu为了效率,会将执行顺序打乱,单核cpu无影响,但是多核cpu会出现问题 java内存模型(Java Memory Model,JMM) 规范了ja