Java
Mr孔先森
人生路莫慌张
展开
-
通俗易懂讲解happens-before原则
在接下来的叙述里我首先会说明happens-before规则是干什么用的,然后用一个简单的小程序说明happens-before规则一、happens-before规则我们编写的程序都要经过优化后(编译器和处理器会对我们的程序进行优化以提高运行效率)才会被运行,优化分为很多种,其中有一种优化叫做重排序,重排序需要遵守happens-before规则,不能说你想怎么排就怎么排,如果那样岂不是原创 2015-09-01 11:50:34 · 19588 阅读 · 10 评论 -
为什么在单例类中不能使用双重检查锁来初始化对象
在网上看到过好多篇文章在说明双重检查锁在多个线程初始化一个单例类时到底为什么不行,今天我们就来看一下问题到底出在了那里下面我们直接进入主题,为什么使用双重检查锁,原因是因为在多线程初始化一个单例类时我们要确保得到一个对象,又想再确保一个对象时得到更高的效率,所以就有了双重检查锁,使用双重检查锁初始化对象的代码如下public class DoubleCheckedLocking {原创 2015-09-18 10:02:30 · 2080 阅读 · 6 评论 -
NIO与IO的区别
JAVA NIO vs IO当我们学习了Java NIO和IO后,我们很快就会思考一个问题:什么时候应该使用IO,什么时候我应该使用NIO在下文中我会尝试用例子阐述java NIO 和IO的区别,以及它们对你的设计会有什么影响Java NIO和IO的主要区别IONIO面向Stream面向Buffer阻塞IO非阻塞IO翻译 2016-06-24 20:35:51 · 28344 阅读 · 5 评论 -
加密解密原理
本篇博文会从一个对话中解释加密和解密的原理首先看一下加密的过程和解密过程(图片摘自《深入java虚拟机》)加密过程:解密过程:假如A授权B的一段代码dmk可以访问A的系统,一个坏蛋C也想要访问A的系统做一些坏事,但是C没有的到A的授权,那么A怎么知道dmk就是dmk呢,是这样做的B通过dmk生成一个散列值,然后将这个散列值追加到代码尾部传送给A,A拿到这个信息后原创 2016-06-25 17:41:04 · 3803 阅读 · 1 评论 -
ThreadPoolExecutor原理与使用
ThreadPoolExecutor是java.util.concurrent包提供的基础线程池,使用非常广泛让我们来看一下线程池的使用和内部实现原理下面是ThreadPoolExecutor的一个构造方法,最终所有其他构造方法都要调用这个构造方法,来看一下构造方法中的参数的作用corePoolSize:核心线程池的大小,当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其原创 2016-06-29 00:41:34 · 1825 阅读 · 0 评论 -
ActiveMQ消息传送机制以及ACK机制详解
AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 原文链接:http://shift-alt-ctrl.iteye.com/blog/2020182一. ActiveMQ消息传送机制 Producer客户端使用来发送消息的, Consumer客户端转载 2016-07-10 18:59:53 · 1136 阅读 · 0 评论 -
java中for和foreach的区别
普通for循环 for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); list.remove(i); }普通for循环在遍历集合时使用下标来定位集合中的元素,java在jdk1.5中开始支持foreach循环,foreach在一定程度上简化了对集合的遍历,但是foreach不能完全代替for循原创 2016-07-01 12:41:42 · 41522 阅读 · 15 评论 -
Java的LockSupport.park()实现分析
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数:[java] view plain copy public native void unpark(Thread jthread); public native voi转载 2016-12-16 17:02:01 · 487 阅读 · 0 评论