java多线程系列
马克吐温
奋斗 努力 不要当咸鱼
展开
-
同步集合类 -笔记整理13
同步集合1.传统集合类在并发访问时的问题说明。2.传统方式下用Collections工具类提供的synchronzedCollection方法来获得同步集合,分析该方法的实现源码。 得到的同步集合,是在操作集合的增删改方法加了锁,不可以同时操作。3.Java5种提供了如下一些同步集合类: (1)通过看Java.util.concurrent包下的介绍可以知道有哪些并发集合原创 2017-04-30 16:25:38 · 572 阅读 · 0 评论 -
线程工具类-通过信号量、计时器等机制控制多线程之间的运行阻塞-笔记整理11
线程工具类1.Semaphore实现信号灯,可以控制访问线程的个数。信号量初始化10,最多只有10个线程并发访问2.CyclicBarrier:提供一种阻塞机制,等待所有线程到达某一点集合之后,再继续向下运行3.CountDownLatch:通过计数器技术,实现一同多,或多通知一4.Exchanger:提供一种阻塞机制,实现俩个线程交换数据 1.Semaphore实现原创 2017-04-26 21:22:58 · 710 阅读 · 0 评论 -
java5条件阻塞Condition的应用-多路等待通知Lock-Condition使用-笔记整理10
java5条件阻塞Condition的应用Condition的功能类似在传统线程技术中的Object.wait和Object.notify的功能。在等待Condition时,允许发生”虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为Condition应该总是在一个循环中被等待,并测试正在等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序原创 2017-04-23 15:31:29 · 1705 阅读 · 0 评论 -
传统实现线程的俩种方式Thread -笔记整理1
参考:http://www.fx114.net/qa-126-102338.aspx 1、实现线程的俩种方式 继承Thread类,实现Runnable接口2、总结:查看Thread类的run()方法的源代码,可以看到其实这两种方式都是在调用Thread对象的run方法, 如果Thread类的run方法没有被覆盖,并且为该Thread对象设置了一个Runnable对象,该r...原创 2017-04-16 13:22:41 · 387 阅读 · 0 评论 -
对读写锁的深入理解-读写锁技术的妙用---实现缓存
对读写锁的深入理解 参考:http://www.educity.cn/wenda/380140.html 其中有些小理解错误,大体可以接受 参考:http://www.wang1314.com/doc/topic-898895-1.html 主要通过其理解降级锁1、对降级锁的理解2、读写锁技术的妙用----读写锁实现缓存1、锁降级原创 2017-04-16 23:34:47 · 1621 阅读 · 0 评论 -
java5的线程锁技术-笔记整理9
java5的线程锁技术1.Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中!2、读写锁:分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁与写锁互斥。这是由JVM自己控制的,你原创 2017-04-16 22:43:51 · 532 阅读 · 0 评论 -
Callable和Future的应用-笔记整理8
Callable和Future的应用1.Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。2.Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务。3.CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Futu原创 2017-04-16 21:44:43 · 458 阅读 · 0 评论 -
常见线程池和启动定时器线程池-笔记整理7
常见线程池和启动定时器线程池1.线程池的概念:线程池是一种多线程处理形式,处理过程中将任务添加到队列,如果线程池中有空闲的线程,则由该线程去完成这些任务。2.Excecutors类的应用 (1)创建固定大小的线程池:Executors.newFixedThreadPool(3); (2)创建缓存线程池:Executors.newCachedThreadPool(3原创 2017-04-16 21:29:47 · 2236 阅读 · 0 评论 -
Java5的线程并发库-笔记整理6
java5原子性操作类的应用 Java5的线程并发库1.看java.util.concurrent包及子包的API帮助文档 看concurrent包的帮助文档页面,对并发库中涉及的内容有一个总体上的介绍。2.了解java.util.concurrent.atomic包: 查看atomic包文档页下面的介绍,可以对基本数据,对数组中的基本数据,对类中的基原创 2017-04-16 20:01:49 · 317 阅读 · 0 评论 -
多个线程访问共享对象和数据的方式-笔记整理5
多个线程之间共享数据的方式探讨1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2.如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享:(1)将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Runnabl原创 2017-04-16 19:45:48 · 504 阅读 · 0 评论 -
ThreadLocal实现线程范围的共享变量-笔记整理4
线程范围内共享变量的概念与作用 1.作用和目的:用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。2.每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。在线程结束时可以调用ThreadLocal.原创 2017-04-16 16:17:06 · 549 阅读 · 0 评论 -
线程的互斥与同步通信-笔记整理3
package cn.wanli.thread;public class TraditionalThreadCommunication {public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Over原创 2017-04-16 14:12:30 · 418 阅读 · 0 评论 -
传统定时器技术-笔记整理2
定时器的应用 参考:http://www.fx114.NET/qa-126-102338.aspx 主要是了解定时器使用的技巧,使其间隔相同时间或不同时间一直执行下去,或者某个固定的时刻或日期,执行,有相关的插件可以实现。主要是当遇到问题的时候,想到有这样的解决方案 Timer类:一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。原创 2017-04-16 14:06:01 · 320 阅读 · 0 评论 -
多线程同步问题-练习题3-笔记整理
练习题3:程序同时启用了4个线程去调用TestDo.doSome()方法,由于TestDo.doSome方法内部的代码是先暂停1秒, 然后在输出以秒为单位的当前时间值,所以,会打印出4个相同的时间值,如下所示: 4:4:1258199615 1:1:1258199615 3:3:1258199615 1:1:1258199615 修改代码,如果有几个线程调用原创 2017-04-30 16:37:45 · 618 阅读 · 0 评论 -
多线程同步问题-练习题2-笔记整理
练习题2:主线程中代码不断产生数据,然后交给TestDo.doSome()方法去处理,将程序改成有10个线程来消费生产者产生的数据。 这些消费者都调用Test.doSome()来处理,,每个消费者都需要1秒才能处理完,程序应保证这些消费者线程依次有序的消费数据, 只有上一个消费者消费完后,下一个消费者才能消费数据。,但要保证这些消费者线程拿到的数据是有顺序的 题意情景原创 2017-04-30 16:37:05 · 451 阅读 · 0 评论 -
多线程同步问题-练习题1-笔记整理
练习题1现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。 解决方案:将主线程中产生的数据存入到阻塞队列中,启动的四个消费者线程一次去队列中取数据。题目代码示例:/* 现有的程序代码模拟产生了16个日原创 2017-04-30 16:34:28 · 672 阅读 · 0 评论 -
可阻塞的队列-笔记整理12
可阻塞的队列一.概述:1.队列包含固定长度的队列和不固定长度的队列。2.什么是可阻塞队列,阻塞队列的作用与实际应用,阻塞队列的实现原理。3.ArrayBlockingQueue: (1)看BlockingQueue类的帮助文档,其中有各个方法的区别对比的表格。 (2)只有put方法和take方法才具有阻塞功能4.用3个空间的队列来演示阻塞队列的功能和效果。5原创 2017-04-26 21:39:58 · 417 阅读 · 0 评论