您的位置:首页 > 编程语言 > Java开发

Thinking in Java 第21章 并发

2016-07-29 11:43 162 查看
//声明:部分内容引自《Java编程思想(第四版)》机械工业出版社

【基本的线程机制】

– 定义任务。只需要实现 Runnable 接口并编写 run() 方法,使得该任务可以执行你的命令。

– Thread 类。调用 Thread 对象的 start() 方法为线程执行必须的初始化操作。

– Executor。管理 Thread 对象。在客户端和人物执行之间提供一个间接层。允许管理异步任务的执行,无需显式地管理线程的生命周期。

CachedThreadPool 在程序执行过程中通常会创建与所需数量相同的线程,然后在它回收旧线程时停止创建新线程。FixedThreadPool 一次性分配有限个线程。SingleThreadExecutor 线程数量为 1。

– 从任务中产生返回值。Runnable 不反回任何值。如果希望任务在完成时能够返回一个值,可以实现 Callable 接口而不是 Runnable 接口。

– 休眠。sleep()。

– 优先级。setPriority(),getPriority()。

– 让步。yield()。

– 后台线程。setDaemon()。

– 编码的变体。在非常简单的情况下,可以使用直接从 Thread 继承的方式,或自管理的 Runnable。

– 术语。

在 Java 中,Thread 类自身不执行任何操作,它只是驱动赋予它的任务,但是线程研究中总是有“线程就是任务”的感觉。

– 加入一个线程。join()。

– 创建有响应的用户界面。使用线程的动机之一就是建立有响应的用户界面。

– 捕获异常。由于线程的本质特性,使得你不能捕获从线程中逃逸的异常。可以用 Executor() 解决。

【共享受限资源】

– 解决共享资源竞争。

防止冲突:当资源被一个任务使用时,在其上加锁。

关键字 synchronized,当要执行被该关键字保护的代码片段的时候,它将检查锁是否可用,然后获取锁,执行代码,释放锁。

Brian 的同步规则:如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须用相同的监视器锁同步。

– 如果在你的类中有超过一个方法在处理临界数据,那么你必须同步所有相关的方法。

同步控制 EvenGenerator。

使用显式的 Lock 对象。

– 原子性与易变性。

原子操作是不能被线程调度机制中断的操作,一旦操作开始,就一直运行到结束,中间不会切换到其他线程。

原子性可以应用于除 long 和 double 之外的所有基本类型之上的“简单操作”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 线程 管理