java
疯狂一世。
hello world
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
前言本文为对CountDownLatch、CyclicBarrier、Semaphore的整理使用CountDownLatchCountDownLatch类位于java.util.concurrent包下,CountDownLatch的作用是让一个或多个线程阻塞直到另外一些线程完成后才被唤醒,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch主要有两个方法,当一个或多个线原创 2020-05-29 23:34:33 · 358 阅读 · 0 评论 -
java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
前言本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁公平锁和非公平锁概念公平锁是指多个线程按照申请锁的顺序来获取锁。类似于进程的FCFS(先来先服务),队列的FIFO(先来先输出)非公平锁是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象(长时间无法获得锁)区别公平锁:公平锁就很公平。在并发环境中,每个线原创 2020-05-29 22:07:33 · 352 阅读 · 0 评论 -
Map再整理,从底层源码探究HashMap
前言本文为对Map集合的再一次整理。内容包括:Map HashMap LinkedHashMap TreeHashMap HashTable ConcurrentHashMapMapMap<k,v>使用键值对存储,map会维护与键k相关联的值v。两个key可以关联相同的对象,但key不能重复,常见的key是String类型,但也可以是任何对象。通过键就可以找到对应的值,这种数据结构就是Map(映射)Map接口中定义的方法:void clear() //删除所有的映射default原创 2020-05-28 16:28:22 · 331 阅读 · 0 评论 -
List再整理,从代码底层全面解析List(看完后保证收获满满)
前言本文为对List集合的再一次整理,从父集接口Collection到顶级接口Iterable再到线程不安全实现类:ArrayList、LinkedList,再到线程安全实现类:Vector(被弃用)、CopyOnWriteArrayList。ListList集合扩展了Collection接口,它是一个允许重复的集合,即允许有多个元素引用相同的对象。我们来看看List接口的源码:public interface List<E> extends Collection<E> {原创 2020-05-27 23:27:51 · 533 阅读 · 0 评论 -
从底层吃透java内存模型(JMM)、volatile、CAS
前言随着计算机的飞速发展,cpu从单核到四核,八核。在2020年中国网民数预计将达到11亿人。这些数据都意味着,作为一名java程序员,必须要掌握多线程开发,谈及多线程,绕不开的是对JMM(Java 内存模型)。那么什么是JMM?什么是可见性、原子性、有序性?如何解决?本文将从CPU的缓存开始谈起,深度解剖JMM底层原理。CPU高速缓存(cache)学过操作系统的同学都应该知道CPU缓存。那么为什么要弄这么一个CPU缓存呢?这是因为缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为原创 2020-05-25 14:24:29 · 861 阅读 · 0 评论 -
八种基本类型的包装类你真的懂了?
进来先做个题: Integer i1 = 10; Integer i2 = 10; Integer i3 = 128; Integer i4 = 128; Integer i5 = 118; Integer i6 = new Integer(10); Float f1 = 10.0f...原创 2020-04-24 13:01:11 · 1080 阅读 · 1 评论 -
程序员应该吃透的集合List
一:先看看集合框架接口图 (图片来源于网络) 从图中可以看到List实现了Collection接口。二:Collection接口是什么? 在java类库中,Collection接口是集合类的基本接口,这个接口有两个基本的方法: public interface Collection<E> extends It...原创 2020-04-22 18:00:50 · 1502 阅读 · 1 评论 -
volatile关键字之全面深度剖析
引言volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,...转载 2019-10-07 23:05:30 · 219 阅读 · 0 评论 -
Java集合之并发容器
一:java中的并发容器总结JDK提供的这些容器大部分在 java.util.concurrent 包中。ConcurrentHashMap: 线程安全的HashMap CopyOnWriteArrayList: 线程安全的List,在读多写少的场合性能非常好,远远好于Vector. ConcurrentLinkedQueue: 高效的并发队列,使用链表实现。可以看做一个线程安全的 L...原创 2019-10-05 22:29:54 · 298 阅读 · 0 评论 -
Java集合详解之Map
一.首先看看集合框架体系图从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解二.Map是什么?Map<k,v>使用键值对存储,map会维护与键k相关联的值v。两个key可以关联相同的对象,但key不能重复,常见的key是String类型,但也可以是任何对象。通过键就可以找到对应的值,这种数据结构就是Map(...原创 2019-10-05 21:17:06 · 453 阅读 · 2 评论 -
Lambda表达式详解
什么是Lambda?首先说说函数式接口,在java中,函数式接口指的是:只有一个抽象方法的接口。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。函数式接口的格式:修饰符 interface 接口名称 { ...原创 2019-09-29 23:09:36 · 294 阅读 · 0 评论 -
集合详解之Set
一:先看看集合框架接口图可以看到Set接口实现了Collection,那么什么是Collection接口,以及Collection详解请移步:集合详解之List二:散列集谈Set前先说说散列集,有一种总所周知的数据结构,可以快速的查找所需要的对象,它就是散列表(hash table)。散列表为每一个对象计算一个整数,称为散列码,也叫哈希码。散列码是有对象的实例域产生的一个整数。更确...原创 2019-09-29 22:08:41 · 631 阅读 · 0 评论 -
集合详解之List
一:先看看集合框架接口图 (图片来源于网络) 从图中可以看到List实现了Collection接口。二:Collection接口是什么? 在java类库中,Collection接口是集合类的基本接口,这个接口有两个基本的方法: public interface Collection<E> extends It...原创 2019-09-28 22:46:56 · 397 阅读 · 0 评论 -
equals()与hashCode()
什么是hashCode()? hashCode()的作用是获取哈希码,也称作为散列码。它实际上是返回一个int整数,这个哈希码的作用是确定该对象在哈希表中索引的位置。hashCode()定义在Object类中,所以所有的类都有hashCode()函数。hashCode()存在的意义: 例如在HashSet查重中,HashSet会先根据hashcode找到要加入位置的...原创 2019-09-18 23:14:04 · 159 阅读 · 0 评论 -
java中==与equals的区别
== : 1.如果==两边是基本数据类型(int,char,float,double,boolean),那么它比较的就是两个基本数据类型的值。 2.如果==两边是引用类型,那么它比较的就是两个对象的内存地址,而不是对象本身。equals (): 1.类没有覆盖equals()方法,那么equals()比较两个对象时,等同于‘’==‘’,原因请看源码...原创 2019-09-18 22:43:42 · 129 阅读 · 0 评论 -
GeneratorSqlMapCustom(mybatis逆向工程)
GeneratorSqlMapCustom可以当做一个自动加载POJO,mapper接口和对应xml的工具来使用,先贴上源码链接点击这里:GitHub源码链接用法看源码注解,项目内容如下:GeneratorSqlmap.javaimport java.io.File;import java.util.ArrayList;import java.util.List;im...原创 2019-09-06 16:15:42 · 348 阅读 · 0 评论 -
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4e47db1f -- Acquisition Attempt Failed!!!
在maven中spring配置c3p0遇到的问题,其它地方遇到解决思路一致,如下:1.检查四个参数是否有问题,注意大小写 2.检查数据库是否开启 3.检查是否导入了mysql-connector-jar包 4.检查mysql-connector-jar的jar包版本是否和数据库版本一致 列如我用的数据库的版本是8.0.12,那么对应的mysql-connector-ja的版本应该为8....原创 2019-06-30 11:43:02 · 10437 阅读 · 7 评论 -
Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
Exception in thread “main” java.lang.Error: 无法解析的编译问题:方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法原因:出现这种错误多半是因为哪里少了一个大括号,导致大括号不匹配,从而使得静态的方法或属性在类外定义了。解决方法:仔细检查大夸号的配对情况...原创 2018-12-16 11:12:15 · 20917 阅读 · 2 评论 -
java.lang.NullPointerException异常原因及解决
java.lang.NullPointerException异常原因是因为创建了一个引用类型的变量却没有指向任何对象而又去通过这个引用类型变量加点的形式去访问非静态的方法及属性。给出三种情况,第一种情况,在启动类中定义了引用类型变量,赋值为空:/** * 引用类型变量没有指向对象所引起的空指针异常 * @author Superhero * @version 2018年12月1...原创 2018-12-16 11:04:16 · 41556 阅读 · 2 评论
分享