Java多线程阅读笔记

本文介绍了Java中的线程概念,包括线程如何启动、为何使用线程、线程生命周期及结束条件等内容。此外还讨论了线程同步、锁保护、Volatile关键字的作用以及并发包的相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个

线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的

线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。

 

 

2.每个 Java 程序都至少有一个线程— 主线程。当一个 Java 程序启动时,JVM 会创建主线程,并

在该线程中调用程序的 main() 方法。

 

 

3.使用线程的一些原因:

· 使 UI 响应更快

· 利用多处理器系统

· 简化建模

· 执行异步或后台处理

· 在不阻塞整个程序的情况下,执行阻塞I/O

 

 

4.在某些情况下,使用线程可以使程序编写和维护起来更简单。比如一个仿真应用程序,您要在其中

模拟多个实体之间的交互作用。给每个实体一个自己的线程可以使许多仿真和对应用程序的建模大

大简化。

 

 

5.虽然线程可以大大简化许多类型的应用程序,过度使用线程可能会危及程序的性能及其可维护性。

线程消耗了资源。因此,在不降低性能的情况下,可以创建的线程的数量是有限制的。

尤其在单处理器系统中,使用多个线程不会使主要消耗 CPU 资源的程序运行得更快。

 

 

6.如果对象拥有一个线程,那么它应该提供一个启动该线程的start() 或 init() 方法,而不是

从构造器中启动它。

 

 

7.线程会以以下三种方式之一结束:

· 线程到达其run() 方法的末尾。

· 线程抛出一个未捕获到的 Exception 或 Error。

· 另一个线程调用一个弃用的 stop() 方法。弃用是指这些方法仍然存在,但是您不应该在新

代码中使用它们,并且应该尽量从现有代码中除去它们。

 

 

8.如果线程是由对 Thread.interrupt() 的调用而中断的,那么休眠的线程会抛出

InterruptedException,这样线程就知道它是由中断唤醒的,就不必查看计时器是否过期。

 

 

9.Thread.yield() 方法就象 Thread.sleep() 一样,但它并不引起休眠,而只是暂停当前线程片刻,这样其它线程就可以运行了。

 

 

10.垃圾收集线程和由 JVM 创建的其它线程等都是守护程序线程。

任何线程都可以变成守护程序线程。可以通过调用Thread.setDaemon() 方法来指明某个线程是守

护程序线程。您也许想要使用守护程序线程作为在程序中创建的后台线程,如计时器线程或其它延迟的事件线程,只有当其它非守护程序线程正在运行时,这些线程才有用。

 

 

11.Volatile 比同步(Synchronized)更简单,只适合于控制对基本变量(整数、布尔变量等)的单个实例的访问。

 

 

12.仅仅因为代码块由锁保护并不表示两个线程不能同时执行该代码块。它只表示如果两个线程

正在等待相同的锁,则它们不能同时执行该代码。

 

 

13.由于同步防止了多个线程同时执行一个代码块,因此性能上就有问题,即使是在单处理器系统上。

最好在尽可能最小的需要保护的代码块上使用同步。

 

 

14.volatile是同步的意思

 

 

15.编写synchronized块时,遵循的几个准则:

*使代码块保持简短

*不要阻塞。不要在synchronized 块或方法中调用可能引起阻塞的方法,如

InputStream.read()。

*在持有锁的时候,不要对其它对象调用方法。这听起来可能有些极端,但它消除了最常见的

死锁源头。

 

 

16.java.util.concurrent 是Java中专门处理并发的包。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值