Thinking in Java 第21章 并发

//声明:部分内容引自《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 之外的所有基本类型之上的“简单操作”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值