java 多线程编程
文章平均质量分 79
bingjing12345
知行合一
展开
-
Thread类的interrupt(),interrupted(),isInterrupted()
1. sleep() & interrupt() 线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt(); 令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例 执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都原创 2013-03-02 18:43:11 · 5352 阅读 · 1 评论 -
对java 内存可见性的理解
同步包括两方面的含义: 独占性和可见性。很多人仅仅理解了独占性,而忽略了可见性。一种常见的错误是,只有在写入共享变量时才需要同步,而读取的时候并不需要同步。 publicclass GetAndSet { privateint i; publicint getI() { returni; } public原创 2014-03-04 17:24:21 · 7796 阅读 · 2 评论 -
java 线程池
http://www.cnblogs.com/jersey/archive/2011/03/30/2000231.htmlReference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExe转载 2014-01-03 18:02:48 · 866 阅读 · 0 评论 -
Inside AbstractQueuedSynchronizer
Inside AbstractQueuedSynchronizer (1)Inside AbstractQueuedSynchronizer (2)Inside AbstractQueuedSynchronizer (3)Inside AbstractQueuedSynchronizer (4)1 Overview 如果查看Reentran转载 2014-01-03 16:54:09 · 929 阅读 · 0 评论 -
CLH队列锁
http://blog.csdn.net/aesop_wubo/article/details/7533186CLH锁即Craig, Landin, and Hagersten (CLH) locks,CLH锁是一个自旋锁,能确保无饥饿性,提供先来先服务的公平性。CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前转载 2014-01-03 14:29:28 · 7985 阅读 · 1 评论 -
ThreadPoolExecutor 的 shutdown() 和shutdownNow()
public List shutdownNow() { List tasks; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { checkShutdownAccess(); advanc原创 2013-03-04 10:23:51 · 14292 阅读 · 0 评论 -
JAVA中 终止线程的方法
在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(),stop(),stop(Throwable) andsuspend(),destroy() andresume()。通过这些方法,我们可以对线程进行方便的操作,但是这些方法中,只有start()方法得到了保留。在Sun公司的一篇文章《Why are Thread.stop, Th原创 2013-03-03 16:55:08 · 1521 阅读 · 1 评论 -
对 AtomicInteger 源码 的理解
java.util.concurrent.atomic 包提供了若干个类能实现对int,long,boolean,reference的几个特殊方法非阻塞原子性,这一系列类的主要基于以下两点1.volatile修饰变量,保证get()/set()的原子性 2.利用系统底层的CAS原语来实现非阻塞的其它方法原子操作 private volatile int value;原创 2013-03-08 17:22:40 · 4219 阅读 · 1 评论 -
对 synchronized 的理解
synchronized : java 中的关键字, 在编译之后 会在同步块的开始处形成monitorenter字节码,在同步块的结束处形成monitorexit字节码。 这两个字节码都需要指定加锁和解锁的对象。 synchronized (lockObject) { } //锁 对象为lockObject public synchronized void Metho原创 2013-03-06 16:39:22 · 1108 阅读 · 3 评论 -
HotSpot jvm 分配对象的 具体过程
原文为 周志明先生首发,http://icyfenix.iteye.com/blog/1145044本文只是做了一些整理虚拟机遇到一条new指令时,先要将对应的类加载到方法区,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(I转载 2013-03-06 15:39:59 · 2570 阅读 · 0 评论 -
多线程和网络编程
1996年Linux2.0以后,内核才开始支持线程在os中引入进程是为了使程序能并发执行,此时进程是一个可拥有资源的独立单位(如已打开的文件,io设备),进程也是一个可独立调度和分派的基本单位。引入线程是为了减少程序在并发执行时的时空开销。多线程os中的进程已不再是一个可执行的实体。对进程施加的与进程状态有关的操作,实际上是通过线程实现的每个线程都只能属于某一个进程,一个进程至少有原创 2012-09-13 13:54:56 · 4636 阅读 · 0 评论 -
concurrentHashMap 到底采取了什么措施使得它比synchronized(HashMap)好
免锁容器背后的通用策略:1使用Lock机制 而不是synchronized 2 对容器的修改可以与读取操作同时发生,只要读取者只能看到完成修改的结果即可。(volatile)3 修改是在容器数据结构的某一部分的一个单独副本上执行的,这样就能避免锁住整个容器 Java Memory Model中,Memory分为两类,main memory和working memory,原创 2012-10-23 17:10:49 · 5204 阅读 · 0 评论