java编程思想 21多线程
文章平均质量分 50
njiang
这个作者很懒,什么都没留下…
展开
-
(48)21.4.4 检查中断---Java编程思想之并发笔记
21.4.4 检查中断1.中断状态的设置 通过用interrupted()来检查中断状态,这个不仅可以告诉你interrupt()是否被调用过,而且可以清除中断状态。清除中断状态可以确保并发结构不会就某个任务被中断这个问题通知你两次,你可以经由单一的InterruptedException或单一的成功的Thread.interrupted()测试来得到这种通知。2.例子原创 2012-12-31 15:52:42 · 561 阅读 · 0 评论 -
(31)21.3.3 并发 练习 13
待补原创 2012-12-31 15:44:04 · 428 阅读 · 0 评论 -
(46)21.4.3 并发 练习 20---Java编程思想之并发笔记
待补原创 2012-12-31 15:51:59 · 439 阅读 · 0 评论 -
(41)21.4.1 并发 练习 17---Java编程思想之并发笔记
待补原创 2012-12-31 15:49:59 · 436 阅读 · 0 评论 -
(40)21.4.1 装饰性花园---Java编程思想之并发笔记
1. 问题的提出: 仿真程序,花园委员会希望了解每天通过多个大门进入公园的总人数。每个大门都有一个计数器,并且每个十字转门的计数值递增时,就表示公园中的总人数的共享计数值也会递增。2.例1package jiangning.c21;import java.util.ArrayList;import java.util.List;import java原创 2012-12-31 15:49:09 · 993 阅读 · 5 评论 -
(39)21.4 终结任务---Java编程思想之并发笔记
1.本节内容是学习关于终止的各类话题和问题。 在前面例子中用到了cancel()和isCanceled()方法被放到一个所有任务都可以看到的类中,这些任务通过检查isCanceled()来确定何时终止他们自己。但是在某些任务中必须更加突然地终止,这将是本节要将的内容。原创 2012-12-31 15:48:35 · 546 阅读 · 0 评论 -
(33)21.3.3 并发 练习 14
待补原创 2012-12-31 15:45:04 · 431 阅读 · 0 评论 -
(30)21.3.3 并发 练习 12
待补原创 2012-12-31 15:43:39 · 477 阅读 · 0 评论 -
(28)21.3.2 解决共享资源竞争---Java编程思想之并发笔记
1.你永远都不知道一个线程何时在运行。 如:当你准备吃饭的时候,发行桌子上的鸡腿不见了。当你准备吃的时候,被另一个人给吃完了已经。并发要解决的问题就是防止两个任务同时访问相同的资源,至少在关键阶段不能出现。2.解决两个任务同时访问相同的资源的方法 防止这种冲突的方法就是当资源被一个任务使用时,在其上加锁。第一个访问某项资源的任务必须锁定这项资源,使得其他任务在其被解原创 2012-11-25 15:47:40 · 811 阅读 · 0 评论 -
(27)21.3.1 不正确的访问资源---Java编程思想之并发笔记
1. 竞争条件:两个或是更多的任务竞争响应某个条件,因此产生冲突或不一致结果的情况。2. 例子:package jiangning.c21;/** * @ClassName: IntGenerator * @Description: 产生整数 * @author jiangNing */public abstract class IntGenerator原创 2012-11-25 15:44:01 · 431 阅读 · 0 评论 -
(25)21.2.14 捕获异常
Java编程思想 第四版 c21 并发 学习笔记1.本节主要将了多线程的异常处理。 由于线程的本质特性,使得你不能捕获从线程中逃逸的异常。一旦异常逃出任务run()方法,它就会向外传播到控制台,除非采取特殊的步骤捕获这种错误的异常。Executor来解决这个问题。package jiangning.c21;import java.util.concurrent原创 2012-11-16 12:40:27 · 755 阅读 · 0 评论 -
(36)21.3.6 并发 练习 15---Java编程思想之并发笔记
待补原创 2012-12-31 15:46:25 · 565 阅读 · 0 评论 -
(43)21.4.3 中断---Java编程思想之并发笔记
1. 中断的位置和要处理的资源 在Runnable.run()方法的中间打断它,当打断被阻塞的任务的时候,可能要清理资源。为了返回良好的状态,必须仔细考虑代码的执行路径,并仔细写catch子句以正确清除所有事物。2.Thread类中的interrupt()方法, 可以用来终止任务,这个方法将设置线程的中断状态。如果一个线程已经被阻塞,或者试图执行一个阻塞的操作,原创 2012-12-31 15:50:52 · 696 阅读 · 0 评论 -
(42)21.4.2 在阻塞时终结---Java编程思想之并发笔记
1. 线程状态可以分为4种1)新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。2)就绪(Runnable):在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是在任意时刻,线程可以运行也可以不运行。只要调度器能分配时间片给线程,它就可以原创 2012-12-31 15:50:25 · 537 阅读 · 0 评论 -
(38)21.3.8 线程本地存储---Java编程思想之并发笔记
1.防止任务在共享资源上产生冲突的第二种方式是根除对变量的共享。 线程本地存储是一种自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储。因此如果你有5个线程都要使用变量x所表示的对象,那线程本地存储就会生成5个用于x的不同的存储块。主要是,它们使得你可以将状态与线程关联起来。2.创建和管理本地线程由java.lang.ThreadLocal类实现原创 2012-12-31 15:47:41 · 566 阅读 · 0 评论 -
(37)21.3.6 并发 练习 16---Java编程思想之并发笔记
待补原创 2012-12-31 15:46:46 · 454 阅读 · 0 评论 -
(34)21.3.5 临界区---Java编程思想之并发笔记
1. 临界区:只希望防止多个线程同时访问方法内部的部分代码而不是正规方法,通过这种方式分离出来的代码段被称为临界区(critical section)。使用关键字synchronized关键字建立。这里synchronized被用来指定某个对象,此对象的锁被用来对花括号内的代码进行同步。2. 代码格式:synchronized(object){//同步代码块}这原创 2012-12-31 15:45:36 · 2003 阅读 · 2 评论 -
(45)21.4.3 并发 练习 19---Java编程思想之并发笔记
待补原创 2012-12-31 15:51:40 · 416 阅读 · 0 评论 -
(44)21.4.3 并发 练习 18---Java编程思想之并发笔记
待补原创 2012-12-31 15:51:22 · 511 阅读 · 0 评论 -
(35)21.3.6 在其它对象上同步---Java编程思想之并发笔记
1. synchronized块必须给定一个在其上进行同步的对象,并且最合理的方式是,使用其方法正在调用的当前对象:synchronized(this),在这种方式中,如果获得了synchronized块上的锁,那么该对象其他的synchronized方法和临界区就不能被调用了。因此如果在this上同步,临界区的效果就会直接缩小在同步的范围内。2.在另一个对象上同步。 有时候必须在另原创 2012-12-31 15:46:04 · 647 阅读 · 0 评论 -
(32)21.3.4 原子类---Java编程思想之并发笔记
1.原子类 Java SE5引入的特殊原子类:AutomaticInteger、AtomicLong、AtomicReference等特殊的原子性变量类,它们提供了下面形式的原子性条件更新操作: boolean compareAndSet(expectedValue, updateValue); 这些原子类在进行性能调优的时候很有用处。package原创 2012-12-31 15:44:35 · 1084 阅读 · 0 评论 -
(29)21.3.3 原子性与易变性---Java编程思想之并发笔记
1.原子操作 原子操作时不能被线程机制中断的操作;一旦操作开始,那么一定可以在可能发生的“上下文切换”之前(切换到其它线程执行)执行完毕。 一般情况下不能用原代替同步,除非你是并发专家。否则就是在玩火。 “如果你可以编写用于现代未处理器的高性能JVM,那么就有资格去考虑是否可以避免同步”。 了解原子性是很有用的,原子性可以应用于除long和double之外的原创 2012-12-31 15:42:35 · 1152 阅读 · 0 评论 -
(47)21.4.3 中断2---Java编程思想之并发笔记
被互斥所阻塞1. 在一个对象上调用synchronized方法,而这个对象在锁已经被其它对象获得,那么调用任务就被挂起,直到这个锁可以获得。2. 例子:package jiangning.c21;public class MultiLock { public synchronized void f1(int count){ i原创 2012-12-31 15:52:20 · 527 阅读 · 0 评论 -
(26)21.3 共享受限资源
1.提出问题 当两个线程同时调用一个实体对象的时候就会出现问题。这个问题如何解决。 举例子说明:两个人要同时用一个茅房。这个问题如何解决。 将是接下来21.3要考虑解决的问题。《Java编程思想》 第四版 c21 并发 学习笔记原创 2012-11-17 19:23:23 · 469 阅读 · 0 评论 -
(24)21.2.13 线程组
Java编程思想 第四版 c21 并发 学习笔记1.关于线程组在开发的过程中从来都不要使用线程组,使用了是自己和自己找麻烦。“最好把线程组看成是一个不成功的尝试,你只要忽略它就好了”原创 2012-11-16 12:34:49 · 363 阅读 · 0 评论 -
(23)21.2.12 创建有响应的用户界面
本小节主要内容:1)使用线程建立有响应的用户界面,举例说明如何进行运行。1.使用线程的目的之一:建立有响应的用户界面,利用线程实现package jiangning.c21;class UnresponsiveUI{ private volatile double d = 1; public UnresponsiveUI()原创 2012-11-16 12:32:01 · 462 阅读 · 0 评论 -
(11)21.2.5 休眠
1. sleep()在1.5之前用的是Thread.sleep(int time);time休眠时间,整数毫秒。在1.5之后用的TimeUtil.sleep(int time);time休眠时间,整数毫秒。如下:package c21;import java.util.concurrent.ExecutorService;import java.util.concu原创 2012-11-05 20:40:53 · 674 阅读 · 0 评论 -
(1)21.1并发的多面性
并发令人困惑的原因: 使用并发时需要解决的问题有多个,而实现并发的方式也有多种,并且在两者之间没有明显的映射关系。因此必须理解所有的这些问题和特例,以便有效的使用并发。用并发解决问题大体上分为:“速度”和“设计可管理性”两种。21.1.1更快的执行 并发通常是提高运行在单处理器上的程序性能。 运行在单处理器上的并发程序理论上是比所有顺序原创 2012-10-04 16:13:46 · 510 阅读 · 0 评论 -
(9)21.2.4 从任务中产生返回值Callable
1. Runnable和Callable Runnalbe是执行工作的独立任务,但是它不返回任何值。 Callable是一种具有类型参数的泛型,它的类型参数表示的实从方法call()中返回的值,而且必须使用ExecutorService.submit()方法调用它,在Java SE5中引入。例子:package c21;import java.util.原创 2012-10-20 22:23:00 · 720 阅读 · 0 评论 -
(7)21.2.3并发 练习3
package jiangning.c21.ex;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Java编程思想 第四版 c21 并发 * 练习3:实现一个Runnable,在run()内部打印一个消息, * 然后调用yield原创 2012-10-20 22:19:07 · 613 阅读 · 0 评论 -
(6)21.2.3 1使用Executor
1.Excutor介绍 java SE5的java.util.concurrent包中的执行器(Executor)将管理Thread对象,简化了并发编程。Executor在客户端和任务执行之间提供了一个中间层;与客户端直接执行任务不同,这个中间对象将执行任务。Excutor允许管理异步任务的执行,而无需显式的管理线程的生命周期。 Excutor在Java SE5/6是原创 2012-10-18 12:42:16 · 743 阅读 · 0 评论 -
(5)c21并发 练习2
package net.mindview.util;public interface Generator { T next(); } package jiangning.c21.ex;import java.util.Arrays;import net.mindview.util.Generator;/** * Java编程思想 第四版 c21 并发原创 2012-10-05 21:19:33 · 1120 阅读 · 0 评论 -
(3)21.2.2 Thread类
1. Thread类转变为工作任务的传统方式是把它提交给一个Thread构造器。如下:package jiangning.c21;/** * Thinking in java c21 * time:2012.10.5 * @author JiangNing * 将Runnable提交给一个Thread类,使得Runnable对象转变为工作任务 * */pu原创 2012-10-05 08:43:11 · 903 阅读 · 0 评论 -
(4)c21并发 练习1
package jiangning.c21.ex;/** * Java编程思想 第四版 c21 并发 * 练习1:实现一个Runnable,在run()内部打印一个消息, * 然后调用yield(),重复这个操作3次,然后从run中返回。 * 在构造其中放置一条启动消息,并且放置一条在任务终止 * 时的关闭消息,使用线程创建大量的这种任务并驱动它们。 * @auth原创 2012-10-05 20:51:26 · 721 阅读 · 0 评论 -
(2)21.2.1定义任务Runnable接口
21.2.1定义任务 线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只有实现Runnable接口的run方法,使得该任务可以执行你的命令。如下:package jiangning.c21;/** * Thinking in java c21 例1 * time:2012.10.4 * @author Jiang原创 2012-10-04 18:17:19 · 849 阅读 · 0 评论 -
(8)21.2.3 并发 练习4
package jiangning.c21.ex;import java.util.Arrays;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import net.mindview.util.Generator;/*** Java编程思想 第四原创 2012-10-20 22:22:22 · 781 阅读 · 0 评论 -
(12)21.2.5 并发 练习 6
package jiangning.c21.ex;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;/** * Java编程原创 2012-11-05 20:41:39 · 522 阅读 · 0 评论 -
(10)21.2.4.1 并发 练习 5
package jiangning.c21.ex;import java.util.ArrayList;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import原创 2012-11-05 20:38:52 · 785 阅读 · 0 评论 -
(22)21.2.11 加入一个线程join()
1.本小节总结join()方法:1) 一个线程可以在其线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。2)若果某个线程在另一个线程t上调用join(),此线程将被挂起,直到目标线程t结束才恢复,即t.isAlive()返回为false。3)也可以调用join()时带上一个超时参数(以毫秒或者毫秒和纳秒为单位),如果目标线程在这段时间到期还没有结束原创 2012-11-16 12:28:48 · 505 阅读 · 0 评论 -
(21)21.2.10 术语
Java编程思想 第四版 c21 并发看完了本小节,不是很明白。我认为作者在告诉读者:在本书中,描述将要执行的工作时,使用术语“任务”,只有在引用到驱动任务的具体机制时,才使用“线程”。原创 2012-11-16 12:22:08 · 519 阅读 · 0 评论