java基础
PitBXu
看山是山,看山不是山,看山还是山
展开
-
BlockingQueue - 阻塞队列(一)
本文介绍阻塞队列基本原理以及两种基本的阻塞队列 ArrayBlockingQueue & LinkedBlockingQueue 阻塞队列是线程池中的一个重要角色,JDK 原生实现的阻塞队列有四种 LinkedBlockingQueue、SynchronousQueue、ArrayBlockingQueue 以及 PriorityBlockingQueue 阻塞队列与其他队列显著的区别有两点:既然用于线程池,必须要支持并发(线程安全)提供阻塞添加与阻塞删除方法在传统队列的基.原创 2020-11-24 18:31:52 · 186 阅读 · 0 评论 -
HashMap在JDK1.7和JDK1.8的改动
Integer.MAX_VALUE = 2 ^ 31 - 1;HashMap table 的最大大小 1 << 30 = 2 ^ 30HashMap 查找的时间复杂度 O(1) + O(n) (before JDK 1.7) | O(1) + O(logN) (after JDK 1.8)JDK 1.7 和 1.8 的区别JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且.原创 2020-11-12 10:15:21 · 475 阅读 · 2 评论 -
JVM_04 指令重排序原则
< previous next >一、Java 8 大原子操作(目前这种说法已弃用)参考资料 《深入理解java虚拟机》page: 364指令作用区解释lock主内存标识变量为线程独占unlock主内存解锁read主内存读到工作内存write主内存写到主内存load工作内存read后的值放到线程本地变量副本store工作内存存储值到主内存给 write 备用use工作内存传值给执行引擎ass.原创 2020-08-13 20:05:29 · 558 阅读 · 0 评论 -
Java 线程&锁(三)
public static void shortSleep(Duration duration) { try { TimeUnit.MILLISECONDS.sleep(duration.toMillis()); } catch (InterruptedException e) { e.printStackTrace(); } }synchronized问题一:synchronized 锁的...原创 2020-07-23 19:58:02 · 159 阅读 · 0 评论 -
Java 线程&锁(二)
概要 : 线程Thread 进程 纤程/协程Fiber图 1 冯诺依曼计算机体系结构进程与线程的区别进程:操作系统资源分配的基本单位线程:CPU执行的基本单位,也是一个进程里面最小的执行单元一个CPU(核)在同一时刻可以执行几个线程? 除非有超线程存在,否则1个线程切换ALU: 运算单元Register: 寄存器PC: 程序计数器Cache: 缓存线程切换的时候,需要把寄存器和程序计数器中的内容保存(保护线程),然后在切换到其他线程执行,再切换回来。JVM 是运行在操作.原创 2020-07-03 17:18:35 · 269 阅读 · 0 评论 -
Collection [集合] & Collections [集合工具类]
Collection [集合] & Collections [集合工具类]标签: java 数据结构 集合java.util.* 中的集合结构Collection 类中定义的基本方法// 对集合的基础操作:int size(); // 获取元素个数boolean isEmpty(); // 是否个数为 0boolean contains(Object element...原创 2020-04-22 10:58:39 · 248 阅读 · 0 评论 -
Java 引用传递与值传递
Java 引用传递与值传递【背景】首先 Java 中没有值传递和引用传递的概念,所谓 pass by value 和 pass by reference 只是从其他语言引申的概念而已。所以你会听到有人说 ”Java 中没有引用传递,全部都是值传递“,然而在使用过程中却又总能遇到 ”方法调用确实改变了某些值“ 的情况。一、基本类型与引用类型基本类型:byte/char/int/long/...原创 2020-01-16 19:27:40 · 176 阅读 · 0 评论 -
Java获取系统环境变量的方法
java中获取环境变量:STEPS:1. Try to get environment from JVM system propertym_env = System.getProperty(“env”);2. Try to get environment from file "server.properties"m_env = m_serverProperties.getProper...原创 2019-08-02 11:21:06 · 5078 阅读 · 0 评论 -
int []数组与List互相转换
int[] data = {4, 5, 3, 6, 2, 5, 1}; // int[] 转 List<Integer> List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); // Arrays.st...原创 2019-07-29 19:40:32 · 30759 阅读 · 3 评论 -
HashMap的底层实现与HashTable
HashMap - HashTable其他数据结构的CRUD性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也...原创 2019-03-25 10:27:52 · 412 阅读 · 0 评论 -
学会线程池,这一篇就够了
线程池线程池核心参数**corePoolSize****maximumPoolSize****keepAliveTime****unit****workQueue****threadFactory****handler**排队策略和拒绝策略**Executors**实现原理线程池内部状态任务提交任务执行ThreadPoolExecutor.addWorkerFailed() 方法ThreadPoo...原创 2019-03-15 16:45:45 · 288 阅读 · 0 评论 -
java中用==判断相等与equals方法的区别
Object类中的.equals()方法和.hashCode()方法详解一、判断相等 众所周知,在java中判断两个变量或者对象是否相等,可以使用 == 操作符或者‘.equals()’方法。而.equals()方法又涉及到.hashCode()方法,他们究竟的原理是什么,让我们细细道来。基本类型的相等判断 当判断基本类型的相等与否时,用‘==‘判断完全没问题,因为基本类型的相等与否完...原创 2018-11-02 16:11:29 · 1529 阅读 · 0 评论