
JAVA线程相关
古月印象星空
热爱生活,热爱工作
展开
-
ThreadPoolExecutor各参数之意义
Java 为我们提供了操作线程池的API: ThreadPoolExecutor ,该类实现了 ExecutorService 接口JDK 中相关的线程池的类都实现了该接口。创建一个线程池可以通过 ThreadPoolExecutor 类来实现:ThreadPoolExecutor executor= new ThreadPoolExecutor(int corePoolSize,in...原创 2020-04-07 17:03:13 · 582 阅读 · 0 评论 -
ThreadLocal
ThreadLocal是什么呢?其实ThreadLocal不是一个线程的本地实现版本,也不是一个Thread。ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值。主要函数Public MethodsTget()Returns th翻译 2011-11-23 21:54:37 · 1923 阅读 · 0 评论 -
Java非阻塞算法简介
本文转载自:http://www.ibm.com/developerworks/cn/java/j-jtp04186/Java非阻塞算法简介Java 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 ??转载 2011-11-04 16:35:21 · 3609 阅读 · 1 评论 -
JAVA线程简介
Thread是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。线程可以是守护线程或非守护线程。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且默认情况下,当且仅当创建它的线程是守护线程时,新线程才是守护程序。当 Java 虚拟机启动时,通常都翻译 2011-11-11 10:30:49 · 1204 阅读 · 0 评论 -
JAVA线程的interrupt
interrupt()只是改变中断状态而已. interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,给受阻塞的线程抛出一个中断信号, 这样受阻线程就得以退出阻塞的状态。更确切 的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞, 那么,它将接收到一个中断异常(InterruptedException),从而原创 2011-11-11 09:25:33 · 17467 阅读 · 4 评论 -
JAVA内存的可见性和指令的reorde
原文地址:中文译版http://www.ibm.com/developerworks/cn/java/j-jtp02244/https://www.ibm.com/developerworks/cn/java/j-jtp03304/英文原版http://www.ibm.com/developerworks/library/j-jtp02244/index.htmlhttp:翻译 2011-12-19 19:29:02 · 3419 阅读 · 0 评论 -
ThreadLocal的内存泄露
ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值。如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序.关于的ThreadLocal更多内容,请参考《ThreadLocal》。在阅读了ThreadLocal的源码后,我发现如果我们使用不恰当,可能造成原创 2011-12-16 11:43:35 · 5028 阅读 · 0 评论 -
流行的原子
文本转载自:https://www.ibm.com/developerworks/cn/java/j-jtp11234/文本转载自:https://www.ibm.com/developerworks/cn/java/j-jtp11234/流行的原子问题:线程之间的协调如果线程之间 不需要协调,那么几乎没有任务可以真正地并行。以线程池为例,其中执行的任务通常相互独立。如转载 2011-11-04 16:39:59 · 943 阅读 · 1 评论 -
单例模式及JMM的无序性
单例模式及JMM的无序性 众所周知单例模式有有饿汉式与懒汉式两种。当一个单例类的初始化开销很大,而希望当用户实际上需要的时候才去创建单例类, 就会考虑使用懒汉式延迟初始化,来提高程序的启动速度。但懒汉式并不容易使用。 在多线程的环境下,如果不同步getInstance()方法会出现线程安全的问题,如果同步整个方法,那么getInstance()就完全变成串行, 串行效率会降低10转载 2011-11-08 19:05:59 · 2460 阅读 · 0 评论 -
为ThreadLocal定制的ThreadLocalMap
ThreadLocalMap是java.lang.ThreadLocal的静态内部类。ThreadLocalMap表面看起来至少实现类似hashmap的功能,但是仔细分析它却有下面的属性。首先,它只是尽量的让value保持在哈希值的位置或后面,其次,它提供了对不同key(这里是ThreadLocal)对象的但hashCode相同的存储的支持。最后,它对Key的引用是弱引用。这个和Wea转载 2011-11-23 22:06:06 · 3282 阅读 · 0 评论 -
线程组ThreadGroup
ThreadGroup线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。构造方法public ThreadGroup(String name) 构造一个新线程组。新线程组的父线程组是目前正在运行翻译 2011-11-23 15:59:20 · 1659 阅读 · 0 评论 -
使用Callable返回结果
自从Java平台的最开始,Runnable接口就已存在了。它允许你定义一个可由线程完成的任务。如大多数人所已知的那样,它只提供了一个run 方法,该方法既不接受任何参数,也不返回任何值。如果你需要从一个未完成的任务中返回一个值,你就必须在该接口之外使用一个方法去等待该任务完成时通报的某种消息。例如,下面的示例就是你在这种情景下可能做的事情: Runnable runnable转载 2011-11-23 15:43:45 · 2487 阅读 · 0 评论 -
互斥锁ReentrantLock
public class ReentrantLockextends Objectimplements Lock, Serializable一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有翻译 2011-11-22 17:43:05 · 1617 阅读 · 0 评论 -
可递归锁与非递归锁
可递归锁与非递归锁转载自《线程同步之利器(1)——可递归锁与非递归锁》http://blog.youkuaiyun.com/zouxinfox/archive/2010/08/25/5838861.aspx最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等。在Windows系统中,临界区(Critical转载 2011-11-22 17:20:15 · 2418 阅读 · 0 评论 -
多线程中递归锁的实现
本文转载自:http://blog.youkuaiyun.com/wtz1985/article/details/301637在上一篇文章中,我已经阐述了多线程中简单锁的实现,可在结束的时候,我就提了那么一个问题,那就是如果在一个链表中进行插入时,要进行查询的操作,如果只是简单的锁,是没法实现的。所以“递归锁”就浮现于世了。可能有些人看到递归这两个字,有点傻了眼,其实也没什么的,简单的介绍,就是进转载 2011-11-10 13:47:07 · 1373 阅读 · 0 评论 -
读写锁ReentrantReadWriteLock
ReentrantReadWriteLock是ReentrantLock 类似语义的 ReadWriteLock 实现。此类具有以下属性: * 获取顺序 此类不会将读取者优先或写入者优先强加给锁访问的排序。但是,它确实支持可选的公平 策略。 非公平模式(默认) 当非公平地(默认)构造时,未指定进入读写锁的顺序,受到 reentranc翻译 2011-11-23 09:31:32 · 2707 阅读 · 1 评论 -
Condition
Condition 只是个接口类,它用于将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。条件(也称为条件队列翻译 2011-11-23 10:32:32 · 2255 阅读 · 0 评论 -
信号量Semaphore
java.util.concurrent.Semaphore是一个计数信号量。从概念上讲,信号量维护了一个许可集。通过acquire()来获得一个许可,如果有许可可用,就返回,否则阻塞直到有许可可用。通过release() 来释放一个许可。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(翻译 2011-11-23 11:29:08 · 1194 阅读 · 0 评论 -
CyclicBarrier
java.util.concurrent.CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到所有到达,然后他们才可以跨越屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。C翻译 2011-11-23 14:36:20 · 1492 阅读 · 1 评论 -
CountDownLatch
java.util.concurrent.CountDownLatch它是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化 CountDownLatch。在调用countDown() 方法,使当前计数减一,且当前计数到达零之前,await 方法会一直受阻塞。当前计数到达零之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。翻译 2011-11-23 15:25:37 · 1228 阅读 · 1 评论 -
线程中的wait和notify方法
wait(),notify()和notifyall()方法是java.lang.Object类为线程提供的用于实现线程间通信的同步控制方法。wait()方法使当前线程主动释放互斥锁,并进入该互斥锁的等待队列。(也就是说,它使当前线程暂停执行,等待其他线程执行notify()方法或者notifyall()方法后再继续执行本线程。)notify()系列方法,用于释放一个项目的线程,唤醒另一翻译 2011-11-22 16:33:48 · 17205 阅读 · 0 评论