- 博客(13)
- 收藏
- 关注
原创 SpringBoot+Elasticsearch+ik
安装 elasticsearch# elasticsearch kibana ik pinyin版本要一致docker pull elasticsearch:7.10.0 docker run --name elasticsearch -p 9200:9200 \ -p 9300:9300 \ # 指定编码 -e LANG=C.UTF-8 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms4g -Xmx4g" \ -v
2022-05-24 16:15:46
1379
原创 11 Java线程池详解
线程池使用及优势线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在创建后启动这些任务,如果线程数据超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行他的主要特点为:线程复用 控制最大并发数 管理线程第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁的消耗第二:提高响应速度。当任务到达时任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程时稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使
2022-02-09 17:09:07
444
原创 10 Java多线程的多种实现方式
Java多线程的多种实现方式通过继承Thread类重写run方法public class MyThread extends Thread{ @Override public void run(){ System.out.println("invoked run()") } }实现Runable接口重写run方法public class MyThread extends Runable{ @Override public void run(){
2022-02-09 17:08:30
163
原创 9 线程通信之生产者于消费者终极版
class MyResource{ public volatile boolean flag = true; private final AtomicInteger atomicInteger = new AtomicInteger(); private final BlockingQueue<String> blockingQueue; public MyResource(BlockingQueue<String> blockingQueue)
2022-02-08 16:30:35
520
原创 8 sychronized和Lock有什么区别
sychronized和Lock有什么区别?用的新的Lock有什么好处?你举例说说原始构成sychronized是关键字属于JVM层面Monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或者方法中才能调用wait/notify等方法)MonitorexitLock是具体的类(java.util.concurrent.locks.Lock)是API层面的锁使用的方法Synchronized 不需要用户去手动释
2022-02-08 16:29:46
226
原创 7 线程通信之生产者与消费者传统版
public class ProdConsumer_BlockQueueDemo { private volatile int num; Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void increment(){ lock.lock(); try{ // 不能用if while
2022-02-08 16:28:49
94
原创 6 BlockingQueue阻塞队列
阻塞队列阻塞对立,顾名思义,首先他是一个队列,而一个阻塞对立在数据结构中所起的作用大致如下图所示:当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。当阻塞队列时满时,往队列里添加元素的操作将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样试图往已满的阻塞队列中添加新的元素的线程同样也会被阻塞,直到其他的线程从列中移除一个或者多个元素或者完全清空队列后使队列重新变得空闲起来并后续新增为什么用?有什么好处在多线程领域:所谓阻塞,在某些情况下会
2022-02-08 16:28:28
79
原创 5 CoundDownLatch/CyclicBarrier/Semaphore使用过吗
CoundDownLatch/CyclicBarrier/Semaphore使用过吗CountDownLatch主要有两个方法,当一个或者多个线程调用await方法时,调用线程会被阻塞。其他线程调用countDown方法会将计数器减一(调用countDown方法的线程不会阻塞)当计数器的值变为零时,因调用await方法被阻塞的线程会被唤醒,继续执行public class CountDownLatchDemo { public static void main(Strin
2022-02-08 16:26:07
74
原创 4 Java各种锁的详细介绍
Java锁1.1 公平锁与非公平锁并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认是非公平锁关于两者区别:公平锁:Threads acquire a fair lock in the order in which they requested it公平锁,就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,活着当前线程时等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己
2022-02-07 17:02:26
126
原创 3.集合类线程不安全问题
集合类不安全问题ArrayListList<String> list = new ArrayList<String>();for(int i=1;i<30;i++){ new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8)) }).start();}// 1 故障现象// java.util.ConcurrentModificationException //
2022-02-07 17:01:47
102
原创 2 CAS是什么
CAS是什么?CAS的全称为Compare-And-Swap,它是一条CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子性的CAS并发原语体现在JAVA语言中就是sum.misc.Unsafe类中的各个方法,调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一个完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语数语操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是
2022-02-07 17:01:14
356
原创 valatile是什么?
volatile是什么?JMM(Java内存模型 Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式1.1 JMM关于同步的规定线程解锁前,必须把共享变量的值刷新回主内存线程加锁前,必须读取主内存的最新值到自己的工作内存加锁解锁是同一把锁1.2 JMM内存模型只可见性由于JVM运行程序的程序的实体是线程,而每个线程创建JVM都会为其创建一个工作
2022-02-07 16:08:13
313
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人