【线程】(1),java 高级特性编程及实战 pdf 百度云
2.如何区分 run 方法和 start 方法
2.1 打印线程的名称
2.2 我们可以借助 jconsole 工具来查看在调用 run 方法和 start 方法的时候有没有创建新新线程,在这里就不演示了,感兴趣的可以下来看看
注意:当有两个线程的时候,如果 t1 的 start 在前,t2 的 start 在后,但是当程序启动时,到底是 t1 对应的线程先执行,还是 t2 对应的线程先执行,这个事情不能确定。start 的先后顺序,只能代表”创建线程“的先后顺序,操作系统先调度哪个线程上 CPU,这个事情时不能确定的
========================================================================
例如:李四一旦进到工作状态,他就会按照行动指南上的步骤去进行工作,不完成是不会结束的。但有时我们需要增加一些机制,例如老板突然来电话了,说转账的对方是个骗子,需要赶紧停止转账,那张三该如何通知李四停止呢?这就涉及到我们的停止线程的方式了。
目前常见的有以下两种方式:
通过共享的标记来进行沟通
调用 interrupt() 方法来通知
方法一:通过定义一个标识符来控制线程的终止
public class ThreadDemo5 {
//定义一个标识符,通过控制标识符来控制线程的终止
private static boolean flag = false;
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
while (!flag) {
System.out.println("别打扰我,我正在转账呢");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("转账终止");
});
thread.start();
//此时等 3s 中之后发现有内鬼,然后终止交易
Thread.sl
eep(3000);
System.out.println("有内鬼,终止交易");
//因为此时有内鬼,然后将标识符设置为 true
flag = true;
}
}
方法二:
1.通过 interrupt 来中断线程
public class ThreadDemo6 {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
//调用 isInterrupted()
while (!Thread.currentThread().isInterrupted()){
System.out.println("我正在转账呢");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//当被中断后打印交易终止
System.out.println("交易终止");
});
thread.start();
Thread.sleep(3000);
System.out.println("有内鬼,终止交易");
评论