目录
线程停止两种情况
1、自身正常停止
自然调用完成,结束线程;
2、外部干涉
停止不能自身正常停止的线程:比如死循环。方法:提供boolean类型的终止变量,外部干涉。
2.1 外部干涉结构体及理解代码
- 加入标识:线程类中 定义 线程体使用的标识;
- 关联标识:线程体使用该标识;
- 提供方法:对外提供方法改变标识。
package com.pt.thread;
import java.util.jar.Attributes.Name;
/**
* 中止线程
* 1) 加入标识:线程类中 定义 线程体使用的标识;
* 2) 关联标识:线程体使用该标识;
* 3) 提供方法:对外提供方法改变标识。
* @author tyler
*
*/
public class TerminateThread implements Runnable {
// 1、加入标识
private boolean flag = true;
private String name;
public TerminateThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
// TODO Auto-generated method stub
// 实现多线程:实现Runnable接口,重写run函数
// 2、关联标识
int i = 0;
while (flag) {
System.out.println("这是TerminateThread类对象" + this.name + "的线程体内容" + "--->" + i++ + "");
}
}
// 3、对外提供方法:改变标识
public void terminateFlag() {
this.flag = false;
}
public static void main(String[] args) {
// 主函数
// 启动线程:1、目标对象;2、调用THread类start函数
TerminateThread targetObject = new TerminateThread("1号");
new Thread(targetObject).start();
// 主线程代码
for (int i = 0; i < 99; i++) {
// 外部控制线程终止
if (i == 88) {
targetObject.terminateFlag();
System.out.println(targetObject.name + "game over");
}
// 主线程内容
System.out.println("主线程内容-->" + i);
}
}
}
运行结果
主线程内容-->0
这是TerminateThread类对象1号的线程体内容--->0
主线程内容-->1
这是TerminateThread类对象1号的线程体内容--->1
这是TerminateThread类对象1号的线程体内容--->2
这是TerminateThread类对象1号的线程体内容--->3
这是TerminateThread类对象1号的线程体内容--->4
这是TerminateThread类对象1号的线程体内容--->5
这是TerminateThread类对象1号的线程体内容--->6
主线程内容-->2
主线程内容-->3
主线程内容-->4
主线程内容-->5
主线程内容-->6
主线程内容-->7
主线程内容-->8
主线程内容-->9
主线程内容-->10
主线程内容-->11
这是TerminateThread类对象1号的线程体内容--->7
主线程内容-->12
主线程内容-->13
主线程内容-->14
这是TerminateThread类对象1号的线程体内容--->8
主线程内容-->15
主线程内容-->16
主线程内容-->17
主线程内容-->18
主线程内容-->19
主线程内容-->20
主线程内容-->21
主线程内容-->22
主线程内容-->23
主线程内容-->24
主线程内容-->25
主线程内容-->26
主线程内容-->27
主线程内容-->28
主线程内容-->29
主线程内容-->30
主线程内容-->31
主线程内容-->32
主线程内容-->33
主线程内容-->34
主线程内容-->35
主线程内容-->36
主线程内容-->37
主线程内容-->38
主线程内容-->39
主线程内容-->40
这是TerminateThread类对象1号的线程体内容--->9
这是TerminateThread类对象1号的线程体内容--->10
主线程内容-->41
这是TerminateThread类对象1号的线程体内容--->11
这是TerminateThread类对象1号的线程体内容--->12
这是TerminateThread类对象1号的线程体内容--->13
这是TerminateThread类对象1号的线程体内容--->14
这是TerminateThread类对象1号的线程体内容--->15
这是TerminateThread类对象1号的线程体内容--->16
这是TerminateThread类对象1号的线程体内容--->17
这是TerminateThread类对象1号的线程体内容--->18
这是TerminateThread类对象1号的线程体内容--->19
这是TerminateThread类对象1号的线程体内容--->20
主线程内容-->42
主线程内容-->43
主线程内容-->44
主线程内容-->45
主线程内容-->46
主线程内容-->47
主线程内容-->48
主线程内容-->49
主线程内容-->50
主线程内容-->51
主线程内容-->52
主线程内容-->53
主线程内容-->54
主线程内容-->55
主线程内容-->56
主线程内容-->57
主线程内容-->58
主线程内容-->59
主线程内容-->60
主线程内容-->61
主线程内容-->62
主线程内容-->63
主线程内容-->64
主线程内容-->65
主线程内容-->66
主线程内容-->67
主线程内容-->68
主线程内容-->69
主线程内容-->70
主线程内容-->71
主线程内容-->72
主线程内容-->73
主线程内容-->74
主线程内容-->75
主线程内容-->76
主线程内容-->77
主线程内容-->78
主线程内容-->79
主线程内容-->80
主线程内容-->81
主线程内容-->82
主线程内容-->83
主线程内容-->84
主线程内容-->85
主线程内容-->86
主线程内容-->87
1号game over
主线程内容-->88
主线程内容-->89
这是TerminateThread类对象1号的线程体内容--->21
主线程内容-->90
主线程内容-->91
主线程内容-->92
主线程内容-->93
主线程内容-->94
主线程内容-->95
主线程内容-->96
主线程内容-->97
主线程内容-->98