随笔分类 - JAVA多线程
1
摘要:众所周知的几个知识点 volatile保证了可见性和有序性,仅在32位long、double类型保证原子性; synchronized保障了原子、有序、可见性,实际上是内部锁; 显式的可重入锁ReentrantLock或者一些工具类如Semaphore, CountDownLatch保障原子、有序、
阅读全文
摘要:要点 ConcurrentHashMap是HashMap的线程安全版本; 不允许[key,value]为null; 比Hashtable锁粒度更细; 采用CAS和synchronized来保证并发安全。数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树; 负载因子0.75; 默认初始化
阅读全文
摘要:主题: 线程的未捕获异常 线程工厂 线程暂停 线程池 线程的未捕获异常 在线程异常的时候,多线程运行不能按照顺序执行过程中捕获异常的方式来处理异常,异常会被直接抛出到控制台(由于线程的本质,使得你不能捕获从线程中逃逸的异常。一旦异常逃逸出任务的run方法,它就会向外传播到控制台,除非你采用特殊的形式
阅读全文
摘要:由资源稀缺性或者程序自身的问题和缺陷导致线程一直处于非Runnable状态,或者线程虽然处于Runnable状态但是其要执行的任务却一直无法进展的故障现象。 有4种情况 死锁 锁死 饥饿 活锁 死锁 如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情
阅读全文
摘要:本章探讨线程安全的java平台本身的机制,免于基于同步(内部锁)或显式锁的实现,可以简化开发,避免锁造成的各种问题和开销。 无状态对象 不可变对象 ThreadLoacl线程特有对象 线程安全并发集合 无状态对象 无状态对象,就是没有实例变量的对象.不能保存数据,是线程安全的。 比如以下方法中的变量
阅读全文
摘要:wait(),notify()和notifyAll() 他们都是java.lang.Object的方法: wait(): Causes the current thread to wait until another thread invokes the notify() method or the
阅读全文
摘要:多线程的一个接口和一个类 //Runnable接口: @FunctionalInterface public interface Runnable { public abstract void run(); } //Thread类,它其实也是实现了Runnable接口 public class Th
阅读全文
摘要:在多任务程序中,我们比较熟悉的是分支-合并框架的并行计算,他的目的是将一个操作(比如巨大的List计算)切分为多个子操作,充分利用CPU的多核,甚至多个机器集群,并行执行这些子操作。 而CompletableFuture的目标是并发(执行多个操作),而非并行,是利用CPU的核,使其持续忙碌,达成最大
阅读全文
摘要:如果是在多线程环境下,就需要注意了。 要点: 1、加Synchronized同步; 2、使用ThreadLocal; 3、jdk8使用DateTimeFormatter替代SimpleDateFormat; 详情见: http://blog.itpub.net/69900354/viewspace-
阅读全文
摘要:理论解释见官方的文档: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html 一个Swing程序中一般有下面三种类型的线程: 初始化线程(Initial Thread) UI事件调度线程(EDT) 任务线程(Wo
阅读全文
摘要:直接上代码
阅读全文
摘要:http://www.cnblogs.com/dolphin0520/p/3932921.html http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor
阅读全文
摘要:scheduleAtFixedRate 没有什么歧义,很容易理解,就是每隔多少时间,固定执行任务。 scheduleWithFixedDelay 比较容易有歧义 貌似也是推迟一段时间执行任务,但Oracle的解释如下,delay 的意思是当结束前一个执行后延迟的时间 scheduleWithFixe
阅读全文
摘要:ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。 所以,在Java中编写线程局部变量的代码相对来说要笨拙一些,因此造成线程局部变量没有在Java开发者中得到很好的普及。 ThreadLocal的接口方法
阅读全文
摘要:在Java中可以有很多方法来保证线程安全,比如使用同步方法、同步块,使用原子类(atomic concurrent classes),实现并发锁,使用volatile关键字,使用不变类和线程安全类。 这里是最基础的线程安全教程 实际上在volatile的使用上很容易有误解,以为volatile就可以
阅读全文
摘要:原文: http://my.oschina.net/noahxiao/blog/101558
阅读全文
摘要:阻塞队列:线程安全 按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。 注意: 1、
阅读全文
摘要:程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(译者注:也就是说:读-读能共存,读-写不能共存,写-写不
阅读全文
摘要:为什么要使用SwingWorker 在swing开发中,如果一个应用程序,执行一些任务,需要大量的时间来完成,比如下载一个大文件或执行一个复杂的数据库查询。 我们假设这些任务是由用户使用一个按钮触发的。在单线程应用程序,用户单击按钮,进入计算的过程,然后等待任务完成之前,所有的事件都在主线程EDT线
阅读全文
1