“核心技术:并发”的版本间差异
跳到导航
跳到搜索
(→使用线程) |
(→中断线程) |
||
第46行: | 第46行: | ||
== 中断线程 == | == 中断线程 == | ||
当线程的run 方法执行方法体中最后一条语句后,并经由执行return 语句返冋时,或者出现了在方法中没有捕获的异常时,线程将终止。<br> | |||
* 在Java 的早期版本中,还有一个stop方法,其他线程可以调用它终止线程。 | |||
*: 因为,stop会瞬间强行停止一个线程,且该线程持有的锁并不能释放;所以,这个方法现在已经被弃用了。 | |||
* '''[[Java中断及中断响应]]''' | |||
=== 相关方法 === | |||
===== java.Iang.Thread ===== | |||
* void interrupt() | |||
*: 向线程发送中断请求。线程的中断状态将被设置为true。如果目前该线程被一个sleep调用阻塞,那么, InterruptedException 异常被抛出。 | |||
* static boolean interrupted() | |||
*: 测试当前线程(即正在执行这一命令的线程)是否被中断。注意,这是一个静态方法。这一调用会产生副作用—它将当前线程的'''中断状态重置为false'''。 | |||
* boolean islnterrupted() | |||
*: 测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态。 | |||
* static Thread currentThread() | |||
*: 返回代表当前执行线程的Thread 对象。 | |||
== 线程状态 == | == 线程状态 == | ||
== 线程属性 == | == 线程属性 == |
2020年10月19日 (一) 16:02的版本
什么是线程
一个程序同时执行多个任务,每一个任务称为一个线程(thread), 它是线程控制的简称。
- 进程与线程有的区别,在于每个进程拥有自己的一整套变量, 而线程则共享数据。
- 共享变量使线程之间的通信比进程之间的通信更有效、更容易。
使用线程
实现线程的两种方式:
- 实现Runnable接口,利用接口构造Thread对象;(Runnable 是一个函数式接口,可以用lambda 表达式)
Runnable r = () -> { /*task code*/ }; Thread t = new Thread(r);
- 继承Thread类,构造一个子类的对象;
class MyThread extends Thread { public void run() { //task code } }
- 不要调用Thread类或Runnable对象的run方法,而应该调用Thread.start方法。
- 直接调用run 方法,只会执行同一个线程中的任务,而不会启动新线程。
- 如果有很多任务, 要为每个任务创建一个独立的线程所付出的代价太大了。可以使用线程池来解决这个问题
相关方法
java.Iang.Thread
- Thread( Runnable target )
- 构造一个新线程, 用于调用给定目标的nm() 方法。
- void start( )
- 启动这个线程, 将引发调用mn() 方法。这个方法将立即返回, 并且新线程将并发运行。
- void run( )
- 调用关联 Runnable 的run 方法。
- static void sleep(long minis)
- 休眠给定的毫秒数。参数:millis 休眠的毫秒数
java.lang.Runnable
- void run( )
- 必须覆盖这个方法, 并在这个方法中提供所要执行的任务指令。
中断线程
当线程的run 方法执行方法体中最后一条语句后,并经由执行return 语句返冋时,或者出现了在方法中没有捕获的异常时,线程将终止。
- 在Java 的早期版本中,还有一个stop方法,其他线程可以调用它终止线程。
- 因为,stop会瞬间强行停止一个线程,且该线程持有的锁并不能释放;所以,这个方法现在已经被弃用了。
相关方法
java.Iang.Thread
- void interrupt()
- 向线程发送中断请求。线程的中断状态将被设置为true。如果目前该线程被一个sleep调用阻塞,那么, InterruptedException 异常被抛出。
- static boolean interrupted()
- 测试当前线程(即正在执行这一命令的线程)是否被中断。注意,这是一个静态方法。这一调用会产生副作用—它将当前线程的中断状态重置为false。
- boolean islnterrupted()
- 测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态。
- static Thread currentThread()
- 返回代表当前执行线程的Thread 对象。