Java高并发编程
文章平均质量分 89
Jack-Chan
非NB非知名Android开发者
展开
-
Java高并发编程:Callable、Future和FutureTask
Callable & Future用于获取线程执行完的结果1、Callable 接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常,而Callable返回结果并且可能抛出异常的任务。2、Future 接口表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使原创 2016-10-25 00:21:22 · 955 阅读 · 0 评论 -
Java高并发编程:同步工具类
这里主要介绍了java5中线程锁技术以外的其他同步工具,首先介绍Semaphore:一个计数信号量。用于控制同时访问资源的线程个数,CyclicBarrier同步辅助类:从字面意思看是路障,这里用于线程之间的相互等待,到达某点后,继续向下执行。CountDownLatch同步辅助类:在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。犹如倒计时计数器,然后是Exchanger:实现两个对象之间数据原创 2016-10-24 20:02:40 · 4663 阅读 · 0 评论 -
Java高并发编程:原子类
并发编程概念1. 原子性一个操作不能被再拆分了;即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题。 增量操作符++,不是原子的操作,它是先读取旧值,然后写回新值,包含2个操作2. 可见性可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。3. 有序性即程序执行的顺序按照代码的先后原创 2016-10-25 00:26:03 · 5155 阅读 · 2 评论 -
集合及concurrent并发包总结
1. 集合包集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对。Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持。List最常用的实现类有:ArrayList、LinkedList、Vector及Stack;Set接口常用的转载 2016-10-04 01:08:27 · 6691 阅读 · 1 评论 -
Java高并发编程:线程池
笔记摘要这里首先介绍了java5中的并发的小工具包:automatic,然后介绍了线程池的概念,对使用java5的方式创建不同形式的线程进行了演示,之后介绍了两个 对象:Callable和Future,用于获取线程执行后的结果,对于线程锁技术则在另外一篇文章中介绍。Java5中的线程并发库都在java.util.concurrent包及子包中java.util.concurrent.atomic包:原创 2016-10-24 20:43:24 · 9062 阅读 · 1 评论 -
Java并发编程-并发工具包java.util.concurrent使用指南
Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝试着如何在项目中使用它们。本文中我将使用 Java 6 版本,我不确定这和 Java 5 版本里的是否有转载 2017-03-24 22:41:04 · 16203 阅读 · 2 评论 -
Java高并发编程:多个线程之间共享数据的方式探讨
多个线程之间共享数据,按照每个线程执行代码是否相同,我们可以采取不同的处理方式,这里通过简单的卖票示例说明了当每个线程执行相同代码的情况,对于多个线程执行不同代码的情况,处理方式比较灵活,这里主要介绍了2种方式,通过2种方式的对比和归纳,我们可以总结出在多个线程执行不同的代码情况下,如何进行代码的设计原创 2016-10-24 19:40:05 · 1053 阅读 · 0 评论 -
Java高并发编程:线程范围内共享数据
笔记摘要所谓线程范围内共享数据,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据,API中为我们提供了一个操作线程范围内共享数据的类ThreadLocal,对于线程范围内共享数据的应用,在ThreadLocal的应用场景中进行了介绍,然后主要对它的使用进行讲解,演示了由单一数据的共享到将多个数据封装到一个对象中,然后进行共享。在开始先用一个Ma原创 2016-10-24 20:32:11 · 4177 阅读 · 0 评论 -
Java高并发编程:定时器、互斥、同步通信技术
这里分析了多线程的一些细节问题,并介绍了传统定时器的创建,同时实现了根据自己的调度计划的自定义定时器,对于传统互斥技术中发现的内部类问题,进行了分析,最后对于同步通信技术,是重点,分析了如何处理类似的问题,如何设计能够更加清晰简单,体现了高内聚和程序的健壮性原创 2016-10-24 20:23:33 · 2830 阅读 · 0 评论 -
Java 程序死锁问题原理及解决方案
原文出处: IBM developerWorksJava 语言通过 synchronized 关键字来保证原子性,这是因为每一个 Object 都有一个隐含的锁,这个也称作监视器对象。在进入 synchronized 之前自动获取此内部锁,而一旦离开此方式,无论是完成或者中断都会自动释放锁。显然这是一个独占锁,每个锁请求之间是互斥的。相对于众多高级锁 (Lock/ReadWriteLock 等),s转载 2016-11-08 21:04:00 · 11810 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。转载 2017-03-05 13:37:28 · 579 阅读 · 0 评论 -
Java高并发编程:使用JDK5中同步技术的3个面试题
第一题:现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。public class Test { public static void main(String[] args){ System.out.prin原创 2017-01-17 09:48:31 · 1618 阅读 · 0 评论 -
Java高并发编程:HandlerThread
继承自Thread,在run()方法中,执行了Looper.prepare()和Looper.loop(),和handler结合使用,实现后台轮询线程功能原创 2016-10-24 21:09:53 · 1193 阅读 · 0 评论 -
Java中的synchronized与volatile关键字
Java中的”synchronized”与”volatile”关键字“synchronized”关键字提供了Java一种内置的锁机制。每一个对象都有一个相对应的“monitor”,这个监听器可以提供互斥的访问转载 2016-09-25 09:34:32 · 790 阅读 · 0 评论 -
Java高并发编程:线程锁技术
这里介绍了java5中的线程锁技术:Lock和Condition,实现线程间的通信,其中的读锁和写锁的使用通过一个缓存系统进行了演示,对于Condition的应用通过一个阻塞队列进行演示原创 2016-10-24 20:13:55 · 5299 阅读 · 2 评论