线程基础

1.什么是进程
先了解一下什么是进程。进 程是操作系统结构的基础,是程序在一个数据集合上运行的过程,是系 统进行资源分配和调度的基本单位。进程可以被看作程序的实体,同 样,它也是线程的容器。上面这段话,比较抽象,对于进程可以看图4- 1进行理解。该图是Windows任务管理器,里面列表中的exe程序就是一 个进程。再举一个例子,如图4-2所示,这是Android Device Monitor中 的Devices窗口,里面就是Android手机中运行的进程。进程就是程序的 实体,是受操作系统管理的基本运行单元。

2.什么是线程
是操作系统调度的最小单 元,也叫作轻量级进程。在一个进程中可以创建多个线程,这些线程都 拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存 变量。

3.为何要使用多线程
在操作系统级别上来看主要有以下几个方面:
• 使用多线程可以减少程序的响应时间。如果某个操作很耗时,或 者陷入长时间的等待,此时程序将不会响应鼠标和键盘等的操作,使用 多线程后可以把这个耗时的线程分配到一个单独的线程中去执行,从而 使程序具备了更好的交互性。
• 与进程相比,线程创建和切换开销更小,同时多线程在数据共享 方面效率非常高。
• 多CPU或者多核计算机本身就具备执行多线程的能力。如果使用 单个进程,将无法重复利用计算机资源,这会造成资源的巨大浪费。在 多CPU计算机中使用多线程能提高CPU的利用率。
• 使用多线程能简化程序的结构,使程序便于理解和维护。

线程的状态
Java线程在运行的声明周期中可能会处于6种不同的状态,这6种线 程状态分别为如下所示。
• New :新创建状态。线程被创建,还没有调用 start 方法,在线 程运行之前还有一些基础工作要做。
• Runnable :可运行状态。一旦调用start方法,线程就处于 Runnable状态。一个可运行的线程可能正在运行也可能没有运行,这取 决于操作系统给线程提供运行的时间。
• Blocked :阻塞状态。表示线程被锁阻塞,它暂时不活动。
• Waiting :等待状态。线程暂时不活动,并且不运行任何代码, 这消耗最少的资源,直到线程调度器重新激活它。
• Timed waiting :超时等待状态。和等待状态不同的是,它是可以 在指定的时间自行返回的。
• Terminated :终止状态。表示当前线程已经执行完毕。导致线程 终止有两种情况:第一种就是run方法执行完毕正常退出;第二种就是 因为一个没有捕获的异常而终止了run方法,导致线程进入终止状态。

创建线程
多线程的实现一般有以下3种方法,其中前两种为最常用的方法。
1.继承Thread类,重写run()方法
2.实现Runnable接口,并实现该接口的run()方法
3.实现Callable接口,重写call()方法

理解中断
当线程的run方法执行完毕,或者在方法中出现没有捕获的异常 时,线程将终止。在Java早期版本中有一个stop方法,其他线程可以调 用它终止线程,但是这个方法现在已经被弃用了。interrupt 方法可以用 来请求中断线程。当一个线程调用 interrupt 方法时,线程的中断标识位 将被置位(中断标识位为true),线程会不时地检测这个中断标识位, 以判断线程是否应该被中断。要想知道线程是否被置位,可以调用
Thread.currentThread().isInterrupted()

还可以调用Thread.interrupted()来对中断标识位进行复位。但是 如果一个线程被阻塞,就无法检测中断状态。如果一个线程处于阻塞状 态,线程在检查中断标识位时如果发现中断标识位为true,则会在阻塞 方法调用处抛出InterruptedException异常,并且在抛出异常前将线程的 中断标识位复位,即重新设置为 false。需要注意的是被中断的线程不一 定会终止,中断线程是为了引起线程的注意,被中断的线程可以决定如 何去响应中断。如果是比较重要的线程则不会理会中断,而大部分情况 则是线程会将中断作为一个终止的请求。另外,不要在底层代码里捕获 InterruptedException异常后不做处理

安全地终止线程
所以当我们在设置volatile boolean on的时候,当有其他线程改变其值 时,所有的线程都会感知到它的变化。这两种方式输出的结果类似,最后打印stop,说明执行到了run方法的末尾,线程即 将终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值