
多线程
文章平均质量分 86
淡淡的倔强
不怕千万人阻挡,只怕自己投降!
展开
-
多线程(一) 多线程介绍及基本使用
<一>多线程介绍 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process)是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。 如:运行中的QQ,运行中的MP3播放器。 程序是静态的,进程是动态的。 线程(thread),进程可进一步细化为线程,是一个程序内部的一条执原创 2017-03-26 22:19:29 · 2215 阅读 · 0 评论 -
多线程(二)线程状态说明
本文线程状态说明转载自:(http://blog.youkuaiyun.com/peter_teng/article/details/10197785) 在原文的基础上进行了补充修改,不当之处,欢迎指教!线程通信
线程中断、线程让步、线程睡眠、线程合并的使用推荐翻阅这篇博客:http://blog.youkuaiyun.com/ghsau/article/details/17560467本文主要补充wait(),notify()和sleep()区别与联系以及为何不推荐使用stop(),suspend()。1. wait(),notify() wait(),notify()和notifyall()方法是java.lang原创 2017-03-28 22:08:47 · 2221 阅读 · 0 评论 -
多线程(四) 线程同步(上)-synchronized,volatile
前言--前言是为了帮助大家能够更好的理解线程通信和线程同步,了解Java内存模型的抽象。 前言部分引用文章地址:http://www.infoq.com/cn/articles/java-memory-model-1?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk原创 2017-03-29 14:06:36 · 2708 阅读 · 0 评论 -
多线程(五)线程同步(中)-Lock,Condition, ReadWriteLock
线程同步(上)提到了七种同步方式,讲述了四种,剩下三种,大家可以继续深入了解下: 上篇博文地址:多线程(四) 线程同步(上)<五>Lock 接口Lock是java.util.concurrent.locks包下的接口,源码如下,注意相关接口:package java.util.concurrent.locks;import java.util.concurrent.TimeUnit; * *原创 2017-03-29 18:27:06 · 2480 阅读 · 0 评论 -
多线程(六)线程同步(下)-ThreadLocal,阻塞队列
这篇主要是为了扩展了解线程同步,在多线程(七)中将重点讲述线程队列。本文转载自:(http://www.cnblogs.com/duanxz/p/3709608.html?utm_source=tuicool&utm_medium=referral)<六>使用局部变量实现线程同步 如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都转载 2017-03-29 19:58:45 · 2395 阅读 · 0 评论 -
多线程(七)线程池详解
引言在 多线程(一) 多线程介绍及基本使用中我提及了线程池及常见的四种线程池,在这章推荐大神的博文,希望大家共同学习,讨论!本文原始地址:http://blog.youkuaiyun.com/ghsau/article/details/53538303。回顾四种常见线程池: 常见线程池: ①newSingleThreadExecutor 单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行转载 2017-03-30 16:15:49 · 2094 阅读 · 0 评论 -
多线程(八)线程队列
本文参考以下文章整理而成,希望大家多多指教!共同学习!原文地址如下:Java 并发工具包 java.util.concurrent 用户指南。JAVA阻塞队列LinkedBlockingQueue 以及非阻塞队列ConcurrentLinkedQueue 的区别。Java线程(篇外篇):阻塞队列BlockingQueue引言 在上一篇多线程(七)线程池详解中提到了线程队列,相信大家现在已清楚明白线转载 2017-03-31 09:13:50 · 2280 阅读 · 0 评论 -
多线程(九)Callable、Future和FutureTask
引言 在前面的文章-多线程(一) 多线程介绍及基本使用中我们讲述了创建线程的4种方式,其中一种是Callable、Future和FutureTask方式实现的。 直接继承Thread,或者实现Runnable接口都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,转载 2017-04-04 21:03:30 · 1968 阅读 · 0 评论 -
多线程(十)CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 若有不正之处请多多谅解,并欢迎批评指正。原文链接:Java并发编程:Co转载 2017-04-05 11:11:44 · 1984 阅读 · 0 评论 -
多线程(十一)Fork/Join框架介绍
1.什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+1转载 2017-04-05 17:35:20 · 2021 阅读 · 0 评论 -
多线程(十二)CAS 和ABA问题
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 volatile是不错的机制,但是volatile不能保证原子性转载 2017-04-06 11:38:32 · 8059 阅读 · 1 评论 -
多线程(十二)锁的种类及辨析
前言 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。下面提及的锁在前面的多线程系列讲述过的,我就不在整理总结啦,主要讲述前面没提及的性质和类型。重量级锁 现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁原创 2017-04-06 18:00:47 · 18362 阅读 · 1 评论 -
多线程(十三)CLH队列锁
前面锁的种类和分析中提及到自旋锁中的CLH和MCS,特转载此篇来详细了解CLH。原文地址:JAVA并发编程学习笔记之CLH队列锁NUMA与SMP SMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP的优点是能够保证内存一致性,缺点是这些共享的转载 2017-04-07 20:50:20 · 4147 阅读 · 0 评论 -
多线程(十四)MCS队列锁
原文地址: JAVA并发编程学习笔记之MCS队列锁简介 与CLH类似,MCS也是由QNode对象构成的链表,每个QNode表示一个锁持有者,表示一个线程要么已经获取锁,要么正在等待锁。它与CLH不同的是,队列是一个显示链表,是通过next指针串起来的。实现MCS队列锁的具体实现如下: 1、如图(a)所示,队列初始化时没有结点,tail=null; 2、如图(b)所示,线程A想要获取锁,于是将自转载 2017-04-07 22:23:35 · 1998 阅读 · 0 评论 -
多线程(扩展篇)Unsafe类
原文地址:JAVA并发编程学习笔记之Unsafe类 java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能: 1、通过Unsafe类可以分配内存,可以释放内存; 类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应。原创 2017-04-07 22:30:56 · 2196 阅读 · 0 评论 -
多线程(十五)AQS介绍
前言 1995年sun公司发布了第一个Java语言版本,可以说从jdk1.1到jdk1.4期间java的使用主要是在移动应用和中小型企业应用中,在此类领域中基本不用设计大型并发场景,当然也没有大型互联网公司使用java,因为担心它本身的性能。在互联网及服务器硬件迅猛的发展下,sun公司更加注重企业级应用方面,毫无疑问高并发是一个重要的主题,于是在J2SE5.0(jdk1.5)代号为老虎的版本中增加转载 2017-04-10 17:12:07 · 4354 阅读 · 1 评论 -
多线程(十六)AQS分析(二):获取锁、释放锁
原文地址:【Java并发编程实战】—–“J.U.C”:AQS分析(二):获取锁、释放锁 上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放。AQS锁获取AQS包含如下几个方法:acquire(int arg):以独占模式获取对象,忽略中断。acquireInterruptibly(int arg): 以独占模式获取对象,如果被中断则中止。acquireShared(int arg)转载 2017-04-10 17:33:14 · 1947 阅读 · 0 评论 -
多线程(十七)AQS(三):阻塞、唤醒:LockSupport
原文地址: 【Java并发编程实战】—– AQS(三):阻塞、唤醒:LockSupport 在上篇博客( 多线程(十六)AQS分析(二):获取锁、释放锁 )中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起;在释放锁后,需要唤醒该线程的继任节点lock方法,在调用acquireQueued():if (shouldParkAfterFailedAcquire(p,转载 2017-04-10 17:52:01 · 1872 阅读 · 0 评论 -
多线程(十八)AQS(四):CLH同步队列
原文地址:【Java并发编程实战】—– AQS(四):CLH同步队列 AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。其结构如下: 知道其结构转载 2017-04-10 19:07:28 · 2234 阅读 · 0 评论 -
多线程(十八)AQS(四):CLH同步队列
原文地址:【Java并发编程实战】—– AQS(四):CLH同步队列 AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。其结构如下: 知道其结构转载 2017-04-10 19:09:00 · 2142 阅读 · 0 评论