java
文章平均质量分 63
高低调
这个作者很懒,什么都没留下…
展开
-
java 1.5 并发流程控制CountDownLatch,CyclicBarrier,Semaphore
一:CountDownLatchCountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。用法1:有一个任务A要等其他几个任务执行完后执行,任务A中调用await()方法(任务A线程就阻塞等待了),其他几个任务线程执行完调用countDown()方法,当countdown为0时,任务A线程就唤醒继续执行了。用法2:也可以反过来,比如原创 2015-07-24 15:16:23 · 412 阅读 · 0 评论 -
BufferedInputStream BufferedOutputStream原理解析,正确使用Buffer
谈到java BIO中的性能优化,大部分人都会说使用BufferedInputStream BufferedOutputStream,理由是IO是跟硬件交互,是耗时操作,使用BufferedInputStream减少IO交互次数能大量提升IO性能。查看BufferedInputStream 源码,BufferedInputStream 有一个缓存数组protected volatile ...原创 2018-10-25 18:17:47 · 2250 阅读 · 1 评论 -
Base64加密原理
Base64加密方式是将三个八位的字节转化为四个六位的字节(不足八位的高位补00),3*8 = 4*6;,所以base64加密过后的内容比原来的大三分之一;举例:加密“ace”,ace转化为二进制为:01100001 01100011 01100101转化为base64的四字节六位:011000 010110 001101 100101那因为计算机是一字节八位的...原创 2018-09-11 17:21:45 · 15151 阅读 · 2 评论 -
Java字节码指令集的使用详细
Java虚拟机指令由一个字节长度的、代表某种特定含义的操作码(Opcode)以及其后的零个至多个代表此操作参数的操作数构成。虚拟机中许多指令并不包含操作数,只有一个操作码。若忽略异常,JVM解释器使用一下为代码即可有效工作。复制代码代码如下:do{ 自动计算PC寄存器以及从PC寄存器的位置取出操作码 if(存在操作数) 取出操作数; 执行操作码所定转载 2015-07-27 11:20:06 · 1795 阅读 · 0 评论 -
延迟队列DelayQueue
项目中需要统计卸载app,但是安卓系统在用户更新app时,发送的广播是先Intent.ACTION_PACKAGE_REMOVED然后再Intent.ACTION_PACKAGE_ADDED,虽然有参数指定了这个广播是否是更新,然饿还是有不少用户反应他们是重新装了一遍应用,没有卸载却有卸载记录。boolean replacing = false; if(extras!=null){原创 2017-06-28 10:47:23 · 1781 阅读 · 5 评论 -
Java8新特性 接口默认方法,接口静态方法
官方原文(英文)地址:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.htmlDefault MethodsInterfaces 章节中举了个例子,汽车生产商制定了操作汽车的接口,那现在如果汽车生产商给汽车添加了新功能(比如起飞)后会怎么样呢?生产商需要制定一个新方法,来让其他公司适配软翻译 2017-05-09 14:24:29 · 353 阅读 · 0 评论 -
使用异或运算 不借助临时变量交换两个数
通常交换两个变量需借助一个临时变量,如:int temp;temp=aa=b;b=temp;使用异或可以不借助临时变量交换两个数:a = a ^ b;b = a ^ b;a = a ^ b;这是用了异或的自反性性质做到的:a^ b ^ b = a ^ 0 = a具体推导过程:原创 2017-04-10 16:41:28 · 510 阅读 · 0 评论 -
RXjava observeOn subscribeOn 解析
RXjava 中的observeOn subscribeOn 两个函数十分类似,相信很多人在使用时会有疑问。官方文档的说明,包括图片不是那么容易理解,特此立翻译贴一篇。官方文档解释如下地址:http://reactivex.io/documentation/operators/observeon.htmlhttp://reactivex.io/documentation/operato翻译 2016-09-19 18:18:15 · 2000 阅读 · 0 评论 -
Java动态代理机制原理详解(JDK 和CGLIB,Javassist,ASM)
原文地址:http://blog.csdn.net/luanlouis/article/details/24589193class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.cl转载 2016-08-23 16:39:41 · 4908 阅读 · 1 评论 -
volatile原理 使用条件
有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步访问提供了免锁的机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的。再讲到volatile关键字之前我们需要了解一下内存模型的相关概念以及并发编程中的三个特性:原子性,可见性和有序性。1. java内存模型与原子性,可见性和有序性Java内存转载 2016-08-28 15:23:26 · 2834 阅读 · 4 评论 -
序列化Serializable serialVersionUID的作用
序列化Serializable的方式特别简单 实现Serializable接口,再在类中声明如下这一个属性即可。private static final long serialVersionUID = -3928832861296252415L;但是其实哪怕不声明serialVersionUID 也可以实现序列化,那么问题来了,到底要不要指定呢?serialVersionUID 到底是干嘛原创 2016-06-14 16:08:51 · 4459 阅读 · 0 评论 -
多线程断点续传下载
此方法实现的下载,下载速度达到网速上限十几兆/S。先讲大体实现思路,再讲其中各种导致下载速度上不去的坑。 原理:下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度。 1. 请求下载链接地址,获取getContentLength,也就是文件总大小。 public boolean initDownLoadFileSize() { try { H...原创 2016-05-27 18:27:28 · 375 阅读 · 0 评论 -
匿名内部类 类名规则 定位$1
今天发现友盟错误反馈一条信息如下:从信息中可以确定是TencentUtil类中某个匿名内部类出了问题,但是因为此类中匿名内部类过多,具体定位是哪一个倒是有点不确定了,所以抽时间研究了下匿名内部类相关知识。匿名内部类属于内部类的其中一种,从内部类讲起,内部类类型共有如下:1.成员内部类public class A { String s; class B{ }原创 2016-02-15 18:23:43 · 13695 阅读 · 4 评论 -
java 类初始化,实例化顺序
记得在学校初学java时讲过,当时也懂了,不过今天看到一个问题时竟然又看不懂,理解不了了....果断重新梳理了一遍。先上题:然后上输出结果:行号呢。。原创 2015-08-04 11:26:34 · 816 阅读 · 0 评论 -
java 调用过程的内存分配情况
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在转载 2015-07-29 14:46:05 · 1353 阅读 · 0 评论 -
Java 内存区域和GC机制
Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对 JVM(Java Virtual Machine)中的转载 2015-07-29 11:14:34 · 372 阅读 · 0 评论 -
java 同步 Synchonized 锁 ReentrantLock 原理 源码
synchronized:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。我们知道java中Synchonized 分三种情况,1.放在方法中。2.放在静态方法中。3.同步代码块。先来知道下三者的区别:对于同步方法,锁是当前实例对象。(如果此对象同步方法执行中,那所有此对象的其他同步方法都阻塞)对于静态同步转载 2015-07-22 17:37:09 · 1669 阅读 · 0 评论