
多线程
文章平均质量分 85
xh16319
这个作者很懒,什么都没留下…
展开
-
传统集合类在并发访问时的问题及Java5提供的同步集合类
1.传统集合类在并发访问时的问题说明,见例子程序 2.传统方式下用Collections工具类提供的synchronizedCollection方法来获得同步集合,分析该方法的实现源码。 3.传统方式下的Collection在迭代集合时,不允许对集合进行修改。 (1)用空中网面试的同步级线程题进行演示 (2)根据AbstractList的checkF原创 2012-11-29 22:22:23 · 1533 阅读 · 0 评论 -
Callable和Future实现调用任务并返回结果数据
1、Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。 2、Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务。 3、CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。 (1原创 2012-11-26 10:59:51 · 1211 阅读 · 0 评论 -
Lock和Condition实现线程同步通信
1.在等待 Condition 时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为 Condition 应该总是在一个循环中被等待,并测试正被等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序程序员总是假定这些虚假唤醒可能发生,因此总是在一个循环中等待。 2.一个锁内部可以有多个Condition,即有多路等待和通知,原创 2012-11-27 23:52:06 · 655 阅读 · 0 评论 -
定时器应用:Timer和TimerTask类
Timer和TimerTask类:Timer类为一个定时器类,调用其schedule(TimerTask task,...)方法,即可在指定时间调用TimerTask类的run()方法中的代码TimerTask类为一个任务类,其为抽象类,只需要创建其子类,重写其run()方法,则可以调用run()中的代码例子程序:package edu.review;import ja原创 2012-11-21 14:29:06 · 707 阅读 · 0 评论 -
线程范围内模块之间共享数据及线程间数据独立
多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做。 2.如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有如下两种方式来实现这些Runnable对象之间的数据共享: (1)将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Run原创 2012-11-22 17:33:48 · 1208 阅读 · 0 评论 -
Lock实现线程的同步
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象 例子程序:package edu.java5.lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.lo原创 2012-11-26 11:30:36 · 682 阅读 · 0 评论 -
java5中为多线程提供的同步工具类
1、Semaphore实现信号灯 (1)Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 A、 Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,原创 2012-11-28 22:12:38 · 798 阅读 · 0 评论 -
wait()与notify()实现线程间的通信
例子程序:package edu.review;public class TraditionalThreadCommunication { /** * 题目要求: * 子线程循环10次,接着主线程循环20次,接着又回到子线程循环10次,接着再回到主线程循环20次, * 如此循环50次,请写出程序。 */ public static void main(St原创 2012-11-21 21:34:06 · 727 阅读 · 0 评论 -
线程间共享数据例子--售票/退票
例子程序:package edu.review;import java.util.Random;/** * 题目要求: * 两个售票窗口,对某一趟列车票进行操作,一个为售票窗口,一个为退票窗口,每个窗口售/退票100张 **/public class Thread2ThreadDataShare { public static void main(String[] ar原创 2012-11-23 20:41:19 · 1095 阅读 · 0 评论 -
Java5中线程池的概念与Executors类的应用
1.线程池的概念与Executors类的应用 (1)创建固定大小的线程池 (2)创建缓存线程池 (3)创建单一线程池 2.关闭线程池 (1)shutdown与shutdownNow的比较 3.用线程池启动定时器 (1)调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取原创 2012-11-24 23:24:29 · 954 阅读 · 0 评论 -
ReadWriteLock读写锁实现线程读写互斥问题
1.Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 2.读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有原创 2012-11-27 21:59:46 · 1725 阅读 · 0 评论 -
创建线程的两种方式
创建线程有两种方式: (1)创建Thread的子类,重写run()方法 (2)创建Thread对象,传递一个Runnable实现类的对象注意: 如果在Thread子类覆盖的run方法中编写了运行代码,也为Thread子类对象传递了一个Runnable对象,那么,线程运行时的执行代码为子类中的run()方法Thread.class类的源代码package ja原创 2012-11-20 23:47:10 · 729 阅读 · 0 评论 -
线程的同步互斥synchronized
注意: 1.静态方法所使用的同步监视器对象是该类的字节码对象,如:Outputer.class 2.类非静态方法所使用的同步监视器对象时this,即类本实例对象 3.synchronized实现两个线程的synchronized代码块的内容不会被中断。保证synchronized代码块的原子性。例子程序:package edu.review;pu原创 2012-11-21 21:20:12 · 681 阅读 · 0 评论 -
ThreadLocal实现线程范围内模块之间共享数据及线程间数据独立
注意: 1.见下页的示意图和辅助代码解释ThreadLocal的作用和目的:用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。 2.每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。在线程结束原创 2012-11-23 20:06:13 · 4241 阅读 · 0 评论 -
可阻塞的队列BlockingQueue
1.什么是可阻塞队列,阻塞队列的作用与实际应用,阻塞队列的实现原理。 2.阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量。 3.ArrayBlockingQueue BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四原创 2012-11-28 23:47:04 · 1259 阅读 · 0 评论 -
Java JUC之Atomic系列12大类实例讲解和原理分解
在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:AtomicInteger、AtomicLong、AtomicBoolean;引用类型:AtomicReference转载 2013-12-01 16:47:38 · 9225 阅读 · 0 评论