随笔分类 - javase
摘要:package com.erayt.mock.test.thread; import com.erayt.fmut.infrastructure.util.thread.LongTimeTaskExecutor; import com.erayt.fmut.infrastructure.util.t
阅读全文
摘要:1.List-》Map List<MarketExecPojo> bondsExecPojos = queryRemoteData(s); Map<String, List<MarketExecPojo>> xBondMap = bondsExecPojos.stream() .filter(i -
阅读全文
摘要:synchronized锁的是对象,所以我们是通过对象里面的对象头来判断是否有锁。 对象头 无锁和偏向锁的锁标志位都为01,轻量级锁为00,重量级锁为10。无锁和偏向锁通过倒数第三位来判断是否是偏向锁。 无锁升级偏向锁过程: 线程A执行到同步代码块时,检查对象头锁标志位是否为01,再看偏向锁标志位是
阅读全文
摘要:接口类 public interface People { void eat(String name); void run(); } 实现类: public class Man implements People{ @Override public void eat(String name) { S
阅读全文
摘要:IO模型 BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器端就会启动一个线程进行处理,无论这个客户端的这次请求做不做任何事,都会创建线程从而造成不必要的开销。 NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求连接,即客户端发送的连接请求都会注册到多路复用器上
阅读全文
摘要:1.ThreadLocal为什么能做到线程隔离? public class ThreadLocal1 { static ThreadLocal<People> t1 = new ThreadLocal<>(); public static void main(String[] args) { new
阅读全文
摘要:String存储结构改变? 有char改为byte,String再也不用char[]来存储,改为byte[]加上编码标记,节约了一些空间 String s1 = "a"; String s2 = "b"; String s3 = “ab”; String s4 = s1+s2; 等价于StringB
阅读全文
摘要:上文讲到了hashmap的底层源码分析,可以了解到hashmap是线程不安全的。比如在场景多个线程同时调用put方法,会出现将前一个值给覆盖的现象。 在JDK1.7版本中,ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,主要实现原理是实现了锁分离的
阅读全文
摘要:数据结构 数组+单向链表+双向链表+红黑树 数组:static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; Node(int hash, K key
阅读全文
摘要:1.LongAdder的本质 里面是一个数组,假设长度为4,当有1000个线程的时候,250个线程分别占用一个,最后相加,就可得到递增总数 2.ReentrantLock可重用锁 可重入锁:可重入锁又称递归锁,是指同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提是锁对象得是
阅读全文
摘要:1.run和start的使用 public class Test1 { private static class T1 extends Thread{ @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.
阅读全文
摘要:Lambda表示式 import org.springframework.beans.factory.ObjectFactory; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class In
阅读全文