java 多线程学习笔记
文章平均质量分 78
在奋斗的大道
程序发烧友
展开
-
java并发包:概论
本文转载至:http://blog.csdn.net/a910626/article/details/51900917为什么要学习并发“今天和一哥们聊天,聊着聊着聊到钱的方面,当时我就说,全世界60亿人,要是每人给我一块钱那不就发财了啊.哥们立马用鄙视的眼神看我,全世界60亿人,平均一人给你钱需要2秒,也就是120亿秒,2亿分钟,330多万个小时,14万天,380年.恭喜你转载 2017-04-20 21:35:46 · 538 阅读 · 0 评论 -
Java线程:线程栈模型与线程的变量
本文转载至:http://lavasoft.blog.51cto.com/62575/99152要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明转载 2017-04-16 02:19:24 · 334 阅读 · 0 评论 -
Java线程:创建与启动
本文转载至:http://lavasoft.blog.51cto.com/62575/99151一、定义线程 1、扩展java.lang.Thread类。 此类中有个run()方法,应该注意其用法:public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则转载 2017-04-16 02:17:36 · 309 阅读 · 0 评论 -
Java线程:并发协作-生产者消费者模型
本文转载至:http://lavasoft.blog.51cto.com/62575/221932Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。转载 2017-04-19 10:18:40 · 369 阅读 · 0 评论 -
Java线程:线程的同步-同步块
本文转载至:http://lavasoft.blog.51cto.com/62575/221922Java线程:线程的同步-同步块 对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高转载 2017-04-19 10:18:22 · 309 阅读 · 0 评论 -
Java线程:线程的同步-同步方法
本文转载至:http://lavasoft.blog.51cto.com/62575/221914Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段。线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题?转载 2017-04-19 10:18:04 · 308 阅读 · 0 评论 -
Java线程:并发协作-死锁
本文转载至:http://lavasoft.blog.51cto.com/62575/222074Java线程:并发协作-死锁 线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。 发生死锁的原因一般是两个对象的锁相互等待造成的。 在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出转载 2017-04-18 21:54:30 · 310 阅读 · 0 评论 -
Java线程:volatile关键字
本文转载至:http://lavasoft.blog.51cto.com/62575/222076Java线程:volatile关键字 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。 谈及到volat转载 2017-04-18 21:54:05 · 309 阅读 · 0 评论 -
Java线程:新特征-线程池
本文转载至:http://lavasoft.blog.51cto.com/62575/222078Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 有关Java5线程新特征的内容全部在java.util转载 2017-04-18 21:53:23 · 297 阅读 · 0 评论 -
Java线程:线程状态的转换
本文转载至:http://lavasoft.blog.51cto.com/62575/99153一. 线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU转载 2017-04-16 03:48:41 · 302 阅读 · 0 评论 -
java并发包:生产者消费者模式
本文转载至:http://blog.csdn.net/a910626/article/details/51900974生产者消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案。在生产者消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程足额提交用户请求,消费者线程负责具体处理生产者提交的任务。生产者和消费者之间则通过共享内存缓转载 2017-04-20 21:32:17 · 503 阅读 · 0 评论 -
java并发包:重入锁与Condition条件
本文转载至:http://blog.csdn.net/a910626/article/details/51900941重入锁 这里介绍一下synchronized、wait、notify方法的替代品(或者说是增强版)-重入锁。重入锁是可以完全替代以上的内容的。并且重入锁的性能是远高于synchronized的,但是jdk6.0开始,jdk对synchronized做了大量转载 2017-04-20 21:35:21 · 965 阅读 · 0 评论 -
java并发包:信号量
本文转载至:http://blog.csdn.net/a910626/article/details/51900947信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量却可以指定多个线程,同时访问某一个资源。信号量主要提供了一下构造函数:Semap转载 2017-04-20 21:34:57 · 494 阅读 · 0 评论 -
java并发包:读写锁
本文转载至:http://blog.csdn.net/a910626/article/details/51900954ReadWriteLock是jdk5中提供的读写分离锁。读写分离锁可以有效的帮助减少锁竞争,以提升性能。用锁分离的机制来提升性能非常容易理解,比如线程A1,A2,A3进行写操作,B1,B2,B3进行读操作,如果使用重入锁或者内部锁,则理论上说所有读之间、读和写之间、写和转载 2017-04-20 21:34:37 · 653 阅读 · 0 评论 -
java并发包:几个多线程控制工具类
本文转载至:http://blog.csdn.net/a910626/article/details/51900962倒计时器 CountDownLatch Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。转载 2017-04-20 21:34:21 · 2168 阅读 · 0 评论 -
java并发包:线程复用之线程池
本文转载至:http://blog.csdn.net/a910626/article/details/51900966什么是线程池频繁使用new Thread来创建线程的方式并不太好。因为每次new Thread新建和销毁对象性能较差,线程缺乏统一管理。好在Java提供了线程池,它能够有效的管理、调度线程,避免过多的资源消耗。优点如下:重用存在的线程,减少对象创建、转载 2017-04-20 21:33:55 · 843 阅读 · 0 评论 -
java并发包:fork/join
本文转载至:http://blog.csdn.net/a910626/article/details/51900967Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子转载 2017-04-20 21:33:32 · 584 阅读 · 0 评论 -
java并发包:jdk并发容器
同步容器同步容器可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。同步容器将它们的状态封装起来,并对每一个公有方法进行同步。主要包括:VectorStackHashTableCollections.synchronized方法生成,例如: Collectinons.synchronizedList()转载 2017-04-20 21:33:11 · 393 阅读 · 0 评论 -
java并发包:future模式
本文转载至:http://blog.csdn.net/a910626/article/details/51900972future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。当我们需要调用一个函数方法时,如果这个函数执行很慢,那么我们就要进行等待。但有时候我们可能并不着急着要结果。因此,我们可以让被调用者立即返回,让他在后台慢慢处理这个请求。对于调用者来说,则可以先处转载 2017-04-20 21:32:43 · 791 阅读 · 0 评论 -
Java线程:新特征-有返回值的线程
本文转载至:http://lavasoft.blog.51cto.com/62575/222082在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 执转载 2017-04-18 21:53:05 · 396 阅读 · 0 评论 -
Java线程:新特征-锁(上)
本文转载至:http://lavasoft.blog.51cto.com/62575/222084在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。 Conditi转载 2017-04-18 21:52:29 · 305 阅读 · 0 评论 -
Java线程:新特征-锁(下)
本文转载至:http://lavasoft.blog.51cto.com/62575/27069/Java线程:新特征-锁(下) 在上文中提到了Lock接口以及对象,使用它,很优雅的控制了竞争资源的安全访问,但是这种锁不区分读写,称这种锁为普通锁。为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,在一定程度上提高了程序的执行效率。 Java中转载 2017-04-18 21:51:44 · 305 阅读 · 0 评论 -
Java线程:线程的调度-优先级
本文转载至:http://lavasoft.blog.51cto.com/62575/221801Java线程:线程的调度-优先级 与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。转载 2017-04-18 01:45:31 · 255 阅读 · 0 评论 -
Java线程:线程的调度-休眠
本文转载至:http://lavasoft.blog.51cto.com/62575/221790Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的转载 2017-04-18 01:41:04 · 272 阅读 · 0 评论 -
Java线程:线程的交互
本文转载至:http://lavasoft.blog.51cto.com/62575/99157线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。 一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习: void noti转载 2017-04-18 01:40:20 · 393 阅读 · 0 评论 -
Java线程:线程的同步与锁
本文转载至:http://lavasoft.blog.51cto.com/62575/99155一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。public class Foo { private int x = 100;转载 2017-04-18 01:39:35 · 344 阅读 · 0 评论 -
java 多线程学习笔记之 线程同步
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界转载 2015-03-24 03:21:28 · 779 阅读 · 0 评论 -
java 多线程学习笔记之 线程互斥
许多线程共享同一数据,这种情况在现实的生活中也是经常发生的,比如火车站的火车票售票系统。火车票售票系统是一个常年运行的系统,为了满足乘客的需求,我们不能只设一个窗口,必须设很多的售票窗口,每个售票窗口就像一个线程,它们各自运行,共同访问相同的数据——火车票的数量,下面我们用多线程模仿一下火车票售票系统:相关测试代码:package com.example.ticker;public原创 2015-03-24 02:37:40 · 538 阅读 · 0 评论 -
java 多线程学习笔记之 线程中断
线程中断与此问题相关的内容主要涉及三部分:已废弃的Thread.stop()、迷惑的thread.interrupt系列、最佳实践Shared Variable已废弃的Thread.stop()@Deprecatedpublic final void stop() { stop(new ThreadDeath());}如上是Hotspot JDK 7中的java转载 2015-03-24 00:48:18 · 631 阅读 · 0 评论 -
java 多线程学习笔记之 线程实现(线程阻塞)
java 实现线程方法主要分为两种方法:一种是继承:java.lang.Thread, 另一种实现java.lang.Runnable接口。对于直接继承Thread 的类来说,代码大致框架是:public class MyThread extends Thread{ //覆写run()方法 public void run(){原创 2015-03-23 23:21:38 · 548 阅读 · 0 评论 -
Java线程:线程的调度-让步
本文转载至:http://lavasoft.blog.51cto.com/62575/221811Java线程:线程的调度-让步 线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他转载 2017-04-18 01:47:30 · 283 阅读 · 0 评论 -
Java线程:线程的调度-合并
本文转载至:http://lavasoft.blog.51cto.com/62575/221817Java线程:线程的调度-合并 线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下:void join() 等待该线程终止。原创 2017-04-18 01:49:34 · 274 阅读 · 0 评论 -
Java线程:新特征-信号量
本文转载至:http://lavasoft.blog.51cto.com/62575/222469Java线程:新特征-信号量 Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资转载 2017-04-18 21:50:59 · 282 阅读 · 0 评论 -
Java线程:新特征-阻塞队列
本文转载至:http://lavasoft.blog.51cto.com/62575/222524阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有转载 2017-04-18 21:50:28 · 248 阅读 · 0 评论 -
Java线程:新特征-阻塞栈
本文转载至:http://lavasoft.blog.51cto.com/62575/222530对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。 这里要特别说明一点的是,阻塞栈是Java6的新特征。、 Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque转载 2017-04-18 21:49:04 · 321 阅读 · 0 评论 -
Java线程:新特征-条件变量
本文 转载至:http://lavasoft.blog.51cto.com/62575/222536条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.util.con转载 2017-04-18 21:48:14 · 251 阅读 · 0 评论 -
Java线程:新特征-原子量
本文转载至:http://lavasoft.blog.51cto.com/62575/222541所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。Java5之后,专门提供了转载 2017-04-18 21:47:42 · 312 阅读 · 0 评论 -
Java线程:新特征-障碍器
本文转载至:http://lavasoft.blog.51cto.com/62575/222738Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。 障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子:import java.util.co转载 2017-04-18 21:46:16 · 250 阅读 · 0 评论 -
Java线程:大总结
本文转载至:http://lavasoft.blog.51cto.com/62575/222742Java线程是Java语言中一个非常重要的部分,Java5之前,多线程的语言支持还是比较弱的,内容也较少,写一个复杂的多线程程序是相当有挑战性的。 在Java5以后,Java对多线程做了很多扩展,扩展部分称之为并发包。这部分内容大大增强了Java多线程编程的能力,通过使用Java5线程新特转载 2017-04-18 21:45:45 · 284 阅读 · 0 评论 -
Java线程:线程的调度-守护线程
本文转载至:http://lavasoft.blog.51cto.com/62575/221845Java线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使转载 2017-04-18 01:52:52 · 278 阅读 · 0 评论