多线程-停止线程方式-Interrupt


- 1 package multithread4;
- 2 /*
- 3 * 停止线程:
- 4 * 1,stop方法。
- 5 *
- 6 * 2,run方法结束。
- 7 *
- 8 * 怎么控制线程的任务结束呢?
- 9 * 任务中都会有循环结构,只要控制住循环就可以结束任务,线程就结束
- 10 *
- 11 * 控制循环通常就用定义标记来完成。
- 12 *
- 13 * 但是如果线程处于冻结状态,无法读取标记。如何结束呢?
- 14 *
- 15 * 可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu执行资格
- 16 * 但是强制动作会发生InterruptedException,记得要处理
- 17 */
- 18
- 19
- 20
- 21 class StopThread implements Runnable{
- 22 private boolean flag = true;
- 23 public synchronized void run() {
- 24 while(flag) {
- 25 try {
- 26 wait();//t0 t1进来都等待了读取不了标记,结束不了任务
- 27 } catch (InterruptedException e) {
- 28 System.out.println(Thread.currentThread().getName()+"......."+e);
- 29 flag = false;
- 30 }
- 31 System.out.println(Thread.currentThread().getName()+".....");
- 32 }
- 33 }
- 34 public void setFlag() {
- 35 flag = false;
- 36 }
- 37 }
- 38 public class StopThreadDemo {
- 39
- 40 public static void main(String[] args) {
- 41 // TODO Auto-generated method stub
- 42 StopThread st = new StopThread();
- 43
- 44 Thread t1 = new Thread(st);
- 45 Thread t2 = new Thread(st);
- 46
- 47 t1.start();
- 48 t2.start();
- 49
- 50 int num = 1;
- 51 for (; ; ) {
- 52 if (++num == 50) {
- 53 // st.setFlag();
- 54 t1.interrupt();
- 55 t2.interrupt();
- 56 break;
- 57 }
- 58 System.out.println("main...."+num);
- 59 }
- 60 System.out.println("over");
- 61 }
- 62
- 63 }
StopThreadDemo
多线程-停止线程方式-Interrupt的更多相关文章
- [19/04/05-星期五] 多线程_Thread(线程、线条)、基本术语
一.基本概念 多线程是Java语言的重要特性,大量应用于网络编程.服务器端程序的开发,最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅的点击软件或者游戏中的各种按钮,其实, ...
- java线程之停止线程
在Java中有以下3种方法可以终止一个正在运行的线程: 1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止. 2.使用stop方法强制终止线程,但不推荐使用 ...
- Java-将多线程停止的两种方法
线程如何停止呢 stop方法过时了,看起描述发现,有其他解决方案. 线程结束:就是让线程任务代码执行完,run方法结束. run方法怎么结束呢? run方法中通常都定义循环,只要控制住循环就哦了. / ...
- Java 学习笔记之 Return停止线程
Return停止线程: 使用interrupt()和return结合也可以实现停止线程的效果.不过还是建议使用“抛异常“的方法,因为在catch块中可以将异常向上抛,使线程停止的事件得以传播. pub ...
- java 多线程 线程组ThreadGroup;多线程的异常处理。interrupt批量停止组内线程;线程组异常处理
1,线程组定义: 线程组存在的意义,首要原因是安全.java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的.但如果在不同的线程组中,那么就不能"跨线程组&q ...
- Java多线程(九)—— interrupt()和线程终止方式
一.interrupt() 说明 interrupt()的作用是中断本线程.本线程中断自己是被允许的:其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限.这有可 ...
- Java多线程(五)停止线程 interrupt
调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程. this.interrupted() :测试当前线程是否已经中断,执行后具有将状态标志清除为false的功能 is ...
- java多线程之停止线程
/*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状 ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
随机推荐
- Spring Boot定时任务配置
import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.a ...
- ubuntu下载源码clang + llvm+lldb 编译+安装
[本文可能涉及到Ubuntu安装以下工具:] A.g++ B.gcc C.make D.cmake E.clang(10.0.1)(必须) F.llvm(10.0.1)(必须) G.lldb(10.0 ...
- 【LeetCode】127. Word Ladder 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/word-lad ...
- vue 设置请求超时时间处理
Vue.http.post('http://114.214.164.77:2222/crptorgraphy',{msg:JSON.stringify(req)},{emulateJSON:true, ...
- Java中常见的转义字符
转移字符对应的英文是escape character , 转义字符串(Escape Sequence)字母前面加上捺斜线"\"来表示常见的那些不能显示的ASCII字符.称为转义字 ...
- 编写Java程序,在子类老虎中重写父类动物的吃食方法
返回本章节 返回作业目录 需求说明: 在子类老虎中重写父类动物的吃食方法 实现思路: 在子类老虎中重写父类动物的吃食方法的实现思路如下: 创建各种动物的父类Animal类,在该类中定义eat()方法. ...
- MobaXterm远程连接Linux图形用户界面
目标: 在自己的Windows桌面打开运行在Linux上的firefox浏览器, 使用MobaXterm终端工具在命令行直接打开图像化界面. 工具: Windows: MobaXterm Linux: ...
- Ubuntu18.04编译Fuchsia
编译环境 系统:Ubuntu 18.04.1 LTS 64-bit 内存:8 GiB CPU:Intel Core i5-4200M CPU @ 2.50GHz × 4 1.安装编译环境 sudo a ...
- 初识python: 字符编码转换
指定当前文件编码格式:#-*- coding:utf-8 -*-unicode(万国码): 英文字母 1个字节,中文3个字节python中所有的字符都是unicode编码所有非unicode编码互转都 ...
- RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...