文章分类 -  java并发编程

摘要:说明:双锁机制的出现是为了解决前面同步问题和性能问题,看上面的代码,简单分析下确实是解决了多线程并行进来不会出现重复new对象,而且也实现了懒加载,但是当我们静下来并结合java虚拟机的类加载过程我们就会发现问题出来了,对于JVM加载类过程不熟悉的,这里我简单介绍下,熟悉的跳过这段(当然,既然你熟悉 阅读全文
posted @ 2016-07-04 16:02 程序猿进化之路 阅读(1021) 评论(1) 推荐(0) 编辑
摘要:一个线程池至少应该具有以下几个方面的功能: 1.提供一个任务接口以便用户加入任务由于Java不支持方法指针,所以操作(方法)只能绑定在对象上,将拥有操作的队象放入队列中,以便工作线程能按一定策略获取对象然后执行其上的方法. 这里需要有两个组件,一是规定操作的任务接口: interface ITask 阅读全文
posted @ 2016-04-14 00:37 程序猿进化之路 阅读(133) 评论(0) 推荐(0) 编辑
摘要:转自:http://blog.csdn.net/ns_code/article/details/17881581 类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加 阅读全文
posted @ 2016-03-28 17:10 程序猿进化之路 阅读(116) 评论(0) 推荐(0) 编辑
摘要:当设置为true时,双向链表中保存的是访问顺序,因此此程序的输出结果为: 1=13=12=14=1 利用LinkedHashmao实现lru cache的关键为,覆盖 输出结果为: 1:1 2:2 3:3 2:2 3:3 4:4 阅读全文
posted @ 2016-03-24 22:11 程序猿进化之路 阅读(137) 评论(0) 推荐(0) 编辑
摘要:Throwable 类是 Java 语言中所有错误或异常的超类。它的两个子类是Error和Exception; java.lang.Error class represents the errors which are mainly caused by the environment in whic 阅读全文
posted @ 2016-03-24 00:37 程序猿进化之路 阅读(221) 评论(0) 推荐(0) 编辑
摘要:http://bijian1013.iteye.com/blog/1972404 1.对于任何引用类型, o.equals(o) == true成立.2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.3.如果 o.equals(o1) = 阅读全文
posted @ 2016-03-21 21:10 程序猿进化之路 阅读(160) 评论(0) 推荐(0) 编辑
摘要:java自定义注解的实现主要通过反射以及动态代理机制 java动态代理简单实例 package learnbasic.reflect.basicexample; public interface Subject { public int doSomething(int n); } package l 阅读全文
posted @ 2016-03-10 14:12 程序猿进化之路 阅读(264) 评论(0) 推荐(0) 编辑
摘要:在没有以不变模式来介绍String的时候,我们先来看String类的其它几个属性,其实String类要说的东西太多,这里只说几个必要的知识: String s1 = “1111”; String s2 = “1111”; String 是唯一可以直接赋常量值的类(这只是对于程序员而言,也就从语法而言 阅读全文
posted @ 2016-03-09 20:47 程序猿进化之路 阅读(165) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/axman/article/details/167955 在类装载(load)时,JVM会调用内置的<clinit>方法对类成员和静态初始化块进行初始化调用。它们的顺序按照源文件的原文顺序。 要明白的是,"<clinit>"方法不仅是类初始化方法,而且也是接 阅读全文
posted @ 2016-03-09 16:57 程序猿进化之路 阅读(112) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/axman/article/details/1089196 Java是在语言级提供对线程的支持,所以Java的内存模型分为主存储器和工作存储器.[Main memory]主存储器就是实例所在的存储区域,所有实例本身都被放在主存储器中,当然这句话本身就说明了实 阅读全文
posted @ 2016-03-08 16:51 程序猿进化之路 阅读(5356) 评论(2) 推荐(0) 编辑
摘要:结束一个线程,我们要分析线程的运行情况.也就是线程正在干什么.如果那个孩子什么事也没干,那就让他立即去睡觉.而如果那个孩子正在摆弄他的玩具,我们就要让它把玩具收拾好再睡觉. 所以一个线程从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束 结束退出. 在我的JDBC专栏 阅读全文
posted @ 2016-03-07 20:12 程序猿进化之路 阅读(129) 评论(0) 推荐(0) 编辑
摘要:[一个线程在进入对象的休息室(调用该对象的wait()方法)后会释放对该对象的锁],基于这个原因.在同步中,除非必要,否则你不应用使用Thread.sleep(long l)方法,因为sleep方法并不释放对象的锁.这是一个极其恶劣的品德,你自己什么事也不干,进入sleep状态,却抓住竞争对象的监视 阅读全文
posted @ 2016-03-07 17:19 程序猿进化之路 阅读(946) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/wojiushiwo945you/article/details/41944291 阅读全文
posted @ 2016-03-02 16:39 程序猿进化之路 阅读(243) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/dd864140130/article/details/49155179 package learnthread.closet; import javax.xml.stream.events.StartDocument; public class JVMHo 阅读全文
posted @ 2016-03-02 15:46 程序猿进化之路 阅读(190) 评论(0) 推荐(0) 编辑
摘要:package learnthread.ftask; public interface Computable<A, V> { /** * 计算函数 * * @param args * @return * @throws Exception */ public V compute(final A ar 阅读全文
posted @ 2016-02-29 22:37 程序猿进化之路 阅读(383) 评论(0) 推荐(0) 编辑
摘要:Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release 阅读全文
posted @ 2016-02-29 11:28 程序猿进化之路 阅读(143) 评论(0) 推荐(0) 编辑
摘要:Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。 你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象 阅读全文
posted @ 2016-02-28 19:55 程序猿进化之路 阅读(91) 评论(0) 推荐(0) 编辑
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现 阅读全文
posted @ 2016-02-25 10:44 程序猿进化之路 阅读(165) 评论(0) 推荐(0) 编辑
摘要:// 阅读全文
posted @ 2016-02-25 10:39 程序猿进化之路 阅读(69) 评论(0) 推荐(0) 编辑
摘要:BlockingQueue的实现有多种 1、LinkedBlockingQueue和ArrayListBlockingQueue是FIFO队列,二者分别和LinkedList以及ArrayList类似 2、PriorityBlockingQueue是一个按优先级排序的队列 3、Synchronous 阅读全文
posted @ 2016-02-25 10:38 程序猿进化之路 阅读(159) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示