![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 83
奋斗吧_攻城狮
JUST DO IT!
展开
-
深入理解synchronized底层原理,一篇文章就够了!
深入理解synchronized底层原理,一篇文章就够了!前言一、synchronized的特性1.1 原子性1.2 可见性1.3 有序性1.4 可重入性二、synchronized的用法三、synchronized锁的实现3.1 同步方法3.2 同步代码块四、synchronized锁的底层实现五、JVM对synchronized的优化5.1 锁膨胀5.1.1 偏向锁5.1.2 轻量级锁5.1.3 重量级锁5.2 锁消除5.3 锁粗化5.4 自旋转载 2021-07-14 17:02:22 · 433 阅读 · 0 评论 -
Http连接池PoolingHttpClientConnectionManager的应用
前言 Http连接需要的三次握手开销很大, 传统的HttpURLConnection并不支持连接池, HTTP1.1以上默认开启keepalive, 对于现在springcloud横行的社会, feign可以配置好http连接池, 不过总会有某些个别的接口不在服务中, 还有一些非springboot的老旧项目也要加入cloud大家族中, 对于内部频繁访问的url地址, 这就需要一款量身定做的工具类了.讲解先来看看测试效果, 两种工具类的时间消耗对比.这个是测试用的方法, 前后分别调用了某一接..转载 2021-05-21 16:48:24 · 2574 阅读 · 1 评论 -
volatile底层原理详解
volatile关键字是Java虚拟机提供的最轻量级的同步机制。在多线程编程中volatile和synchronized都起着举足轻重的作用,没有这两者,也就没有那么多JUC供我们使用。本文会介绍volatile的作用,着重讲解volatile的底层实现原理。由于volatile的出现和CPU缓存有关,也会介绍CPU缓存的相关内容,让我们更清晰的理解volatile原理的来龙去脉。一、volatile的作用并发编程中有3大重要特性,了解一下:原子性一个操作或者多个操作,要么全部执行成功,要转载 2021-04-08 10:26:33 · 576 阅读 · 0 评论 -
HashMap 夺命二十一问
1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>\[\] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 put() 方法:转载 2020-06-27 22:42:02 · 241 阅读 · 0 评论 -
深入理解Java类加载器(ClassLoader)
出自【zejian的博客】http://blog.csdn.net/javazejian/article/details/73413292 类加载的机制的层次结构每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑,这些”.java”文件经过Java编译器编译成拓展名为”.class”的文件,”.class”文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载...转载 2018-03-08 10:56:35 · 607 阅读 · 0 评论 -
通过反编译深入理解Java String及intern
一、字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究。倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题。我在招聘的时候也偶尔会问应聘者相关的问题,倒不是说一定要回答的特别正确和深入,通常问这些问题的目的有两个,第一是考察对 JAVA 基础知识的了解程度,第二是考察应聘者对技术的态度。 我们看看以下程序会输出什么结转载 2017-08-28 15:52:45 · 1112 阅读 · 0 评论 -
Java:String、StringBuffer和StringBuilder的区别
1 StringString:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。String类的包含如下定义:[java] view plain copy/** The value is used for character storage. */ private final char转载 2017-09-15 21:13:17 · 252 阅读 · 0 评论 -
Java多线程总结之---线程同步
一、意义 java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 在具体的Java代码中需要完成以下两个操作:把竞争访问的资源类变量标识为private;不让外部直接更改同步修改变量的代码,使用synchronized关键字原创 2017-09-05 16:54:32 · 381 阅读 · 0 评论 -
中缀表达式转换成前缀表达式和后缀表达式的极其简单方法
35,15,+,80,70,-,*,20,/ //后缀表达方式(((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定~~!正如习惯了10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习...原创 2015-09-15 01:13:07 · 15748 阅读 · 9 评论 -
Java多线程总结之---概念、创建/启动、状态变换
一、进程和线程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如Java.exe进程中可以运行很多线程。线程总是属于某个进程,线程没有自己的虚拟地址空间,与进程内的其原创 2017-09-04 21:54:48 · 394 阅读 · 0 评论 -
Stream Java8的集合类利器——走进Java Lambda
通过前面的例子,相信你已经对Lambda表达式有了一个初步了解了,前一篇主要是属性Lambda的语法,这篇我们继续。 Java8做了很多改进,以便我们少写点代码。接下来我们就来稍微了解一下,JDK自带的库文件中的一些简便工具吧。在本系列第〇篇,我就以一段“滑稽”的代码开头。说,在集合里面经常会做这种“滑稽”的处理。幸运的是,Java8给集合类提供了新技能,解决这个问题,新技能是S转载 2017-08-25 18:19:55 · 634 阅读 · 0 评论 -
JAVA闭包
一、闭包的定义。 有很多不同的人都对闭包过进行了定义,这里收集了一些。 # 是引用了自由变量的函数。这个函数通常被定义在另一个外部函数中,并且引用了外部函数中的变量。 -- wikipedia>> # 是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。-- > # 是一个匿名的代码块,可以接受参数,并返回一个返回值,也可以引用和使用在它周围转载 2017-08-14 21:19:09 · 268 阅读 · 0 评论 -
Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记。类似下面这段代码一样获取插入后的主键User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主转载 2017-08-07 15:18:16 · 327 阅读 · 0 评论 -
java多线程总结
Java多线程编程总结 下面是Java线程系列博文的一个编目: Java线程:概念与原理Java线程:创建与启动Java线程:线程栈模型与线程的变量Java线程:Java线程的5种状态及状态之间转换Java线程:线程的同步与锁Java线程:线程的交互Java线程:线程的调度-休眠 Java线程:线程的调度-优先级Java线程:线程的调度-让步Java线程:线程的调度-合并Java线程:线程的调度-...翻译 2018-01-29 10:41:28 · 1174 阅读 · 0 评论 -
java集合类详解
Java Collections Framework InternalsAuthorsNameWeibo IdBlogMail李豪@计算所的小鼠标CarpenterLeehooleeucas@163.comIntroduction关于*C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Fram转载 2018-01-16 20:01:28 · 237 阅读 · 0 评论 -
深入了解JVW
Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就...转载 2019-08-07 15:14:44 · 274 阅读 · 0 评论 -
HashMap只有容量达到阀值才发生扩容吗?
原文链接地址:https://blog.csdn.net/u011328417/article/details/80728571看了网上很多文章,说HashMap在元素达到负载因子对应数的时候就发生扩容。如果你看过源码就会发现,其实还有一种情况也可能会发生扩容:树形化的时候。对象最终是如何放入HashMap中的? HashMap底层是由数组+链表组成的,为了方便不懂的人更容易理解,那我们...转载 2018-09-12 14:17:08 · 1253 阅读 · 0 评论 -
ConcurrentHashMap为什么是弱一致性的
关于ConcurrentHashMap在之前的ConcurrentHashMap原理分析中已经解释了原理,而HashTable其实大抵上只是对HashMap的线程安全的封装,在JDK7与JDK8中HashMap的实现中解释了HashMap的原理。至此你应该能够明白,ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能...转载 2018-08-03 16:19:54 · 6237 阅读 · 1 评论 -
Java中的常量池
原文地址:Java中的常量池(字符串常量池、class常量池和运行时常量池 简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨:在Java的内存分配中,总共3种常量池:1.字符串常量池(String Cons...转载 2018-05-08 09:34:57 · 172 阅读 · 0 评论 -
JVM理解其实并不难!
我的简书同步发布:JVM理解其实并不难! 原文地址:JVM理解其实并不难!在阅读本文之前,先向大家强烈推荐一下周志明的《深入理解Java虚拟机》这本书。前些天面试了阿里的实习生,问到关于Dalvik虚拟机能不能执行class文件,我当时的回答是不能,但是它执行的是class转换的dex文件。当面试官继续问,为什么不能执行class文件时,我却只能回答Dalvik虚拟机内部的优化原因,却不...转载 2018-05-08 09:15:34 · 168 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
原文地址:http://www.importnew.com/28263.html今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,转载 2018-04-08 15:09:05 · 169 阅读 · 0 评论 -
想进大厂?50个多线程面试题,你会多少?(一)
点击打开原文链接 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,可以使用多线程对进行运算提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒什么是线程安全和线程不安全?通俗的说:加锁的就是是线程安全的,不加锁的就是是线程不安全的线程安全线程安全: 就是多线程访问时,采用了加锁机制,...转载 2018-03-19 21:26:36 · 675 阅读 · 0 评论 -
AQS的原理浅析
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大转载 2018-03-08 09:52:35 · 427 阅读 · 0 评论 -
BIO,NIO,AIO的区别及理解
一、看图网上很多IO资料,对新手来说,越看越晕。根据自己的理解,总结对比了一下BIO、NIO、AIO。BIO:线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。如下图:NIO(reactor模型):线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。如下图:AIO(proactor模型...原创 2018-02-28 09:22:42 · 237 阅读 · 0 评论 -
Java中int和Integer比较问题
Java中有两种类型基本类型基本数据类类型存的是数值本身引用类型引用类型变量在内存放的是数据的引用基本类型通过==比较的是他们的值大小,而引用类型比较的是他们的引用地址如果你运行下面的代码1234Integer a = 1000, b = 1000;转载 2017-07-28 15:45:23 · 380 阅读 · 0 评论 -
通过反编译深入理解Java String及intern
一、字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究。倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题。我在招聘的时候也偶尔会问应聘者相关的问题,倒不是说一定要回答的特别正确和深入,通常问这些问题的目的有两个,第一是考察对 JAVA 基础知识的了解程度,第二是考察应聘者对技术的态度。 我们看看以下程序会输出什么结转载 2017-08-09 14:10:02 · 3923 阅读 · 0 评论 -
Java:按值传递还是按引用传递详细解说
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了转载 2015-09-21 17:23:00 · 378 阅读 · 0 评论 -
Java中的static关键字解析
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 原文...转载 2015-08-22 01:42:15 · 442 阅读 · 0 评论 -
java序列化
哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列...转载 2015-08-20 16:51:36 · 283 阅读 · 0 评论 -
Java 序列化Serializable详解
1、什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。2、什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;3、如何转载 2015-08-20 16:06:26 · 358 阅读 · 0 评论 -
Java的内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。1.J...转载 2015-08-19 22:52:06 · 305 阅读 · 0 评论 -
Java构造和解析Json数据的两种方法详解
一、介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究。二、下载jar依赖包:可以去这里下载 三、基本方法介绍1. List集合转换成json方法List list = n...转载 2015-07-24 16:49:14 · 416 阅读 · 0 评论 -
osgi 运行错误
使用eclipse搭建标准的osgi测试时(HelloWord模板),启动后osgi控制台报错“Workbench has not been created yet”。解决方式:在参数值最后加入-clean(如下图)原创 2015-08-02 16:54:35 · 1059 阅读 · 0 评论 -
java关键字及其作用
一、 关键字总览:访问控制privateprotectedpublic类 方法变量修饰符abstractclassextendsfinalimplementsin原创 2015-08-22 00:55:03 · 931 阅读 · 0 评论 -
java读取properties文件方法
简介 我们在做一些Java应用开发的时候,会将很多环境特定的变量定义到一个配置文件中。比较常见的定义文件有xml, properties,甚至txt等格式的。在Java里有一个类似于标准配置格式的文件,就是.properties类型的文件。它主要用来存储一些名值对的内容,里面的内容都存成如propertyname=propertyvalue这种样式。读取properties文件的方法转载 2015-07-29 15:16:41 · 604 阅读 · 0 评论 -
请注意:java中没有引用传递
说明:本文的适用对象为java初学者、如果有读者发现文章中有叙述不妥之处,请指正。今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交。有人说java只有值传递,也有人说java既有值传递也有引用传递,那么java中到底有没有引用传递呢,下面我来分析一下。一、首先来明确一下"值传递"和"引用传递的"区别值传递:是对所传递参数进行一次副本拷贝,对参数的...转载 2015-06-04 23:15:36 · 405 阅读 · 0 评论 -
死锁产生的原因及四个必要条件
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻...原创 2015-09-21 17:29:01 · 443 阅读 · 0 评论 -
java Socket通信使用BufferedReader和BufferedWriter的注意事项
注意事项:readLine()要求有换行标识,write()要输出换行标识,要调用flush()刷新缓冲区。下面是取自java socket通信中的一小段代码。BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter writer =...原创 2016-04-24 15:39:32 · 555 阅读 · 0 评论 -
Java基础-方法区以及static的内存分配图
前面的几篇都没有太明确地指出 方法区 是什么?现在通过一些资料的收集和学习,下面做一些总结什么是方法区:方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息)。方法区存放的信息包括:类的基本信息:1.每个类的全限定名2.每个类的直接超类的全限定名(可约束类型转换)3.该类转载 2017-08-09 10:42:04 · 388 阅读 · 0 评论 -
JAVA中堆和栈的区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在栈中定义一转载 2017-08-08 21:46:52 · 212 阅读 · 0 评论