如何停止线程

  1、使用stop方法强行终止线程(这个方法不推荐使用,可能会出现业务操作未执行完,线程中断了)

package com.cppdy;

class MyThread15 extends Thread{

    @Override
public synchronized void run() {
while(true) {
try {
wait();
} catch (Exception e) { }
//如果这里有非常重要的代码块,是不是就出现问题了
System.out.println("Thread run------");
}
} } public class ThreadDemo15 { public static void main(String[] args) throws Exception {
MyThread15 mt = new MyThread15();
Thread thread1 = new Thread(mt);
Thread thread2 = new Thread(mt);
thread1.start();
thread2.start();
int count=0;
while(true) {
System.out.println("Main run------");
Thread.sleep(100);
if(count==30) {
thread1.stop();
thread2.stop();
break;
}
count++;
}
} }

  2、使用interrupt方法中断线程(将业务操作执行完后再中断线程)

package com.cppdy;

class MyThread15 extends Thread{

    @Override
public synchronized void run() {
while(true) {
try {
wait();
} catch (Exception e) { }
//如果这里有非常重要的代码块,是不是就出现问题了
System.out.println("Thread run------");
}
} } public class ThreadDemo15 { public static void main(String[] args) throws Exception {
MyThread15 mt = new MyThread15();
Thread thread1 = new Thread(mt);
Thread thread2 = new Thread(mt);
thread1.start();
thread2.start();
int count=0;
while(true) {
System.out.println("Main run------");
Thread.sleep(100);
if(count==30) {
thread1.interrupt();
thread2.interrupt();
break;
}
count++;
}
} }

  3、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止

package com.cppdy;

class MyThread15 extends Thread{

    public volatile boolean flag=true;

    @Override
public synchronized void run() {
while(flag) {
try { } catch (Exception e) {
setFlag(flag);
}
System.out.println("Thread run------");
}
} public void setFlag(boolean flag) {
this.flag=flag;
} } public class ThreadDemo15 { public static void main(String[] args) throws Exception {
MyThread15 mt = new MyThread15();
Thread thread1 = new Thread(mt);
Thread thread2 = new Thread(mt);
thread1.start();
thread2.start();
int count=0;
while(true) {
System.out.println("Main run------");
Thread.sleep(100);
if(count==30) {
mt.setFlag(false);
break;
}
count++;
}
} }

java多线程快速入门(十九)的更多相关文章

  1. java多线程快速入门(九)

    多线程安全问题(卖火车票案例) package com.cppdy; class MyThread5 implements Runnable{ private Integer ticketCount= ...

  2. java 多线程 快速入门

    ------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有 ...

  3. java多线程快速入门(二十二)

    线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接 ...

  4. java多线程快速入门(二十)

    1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 ...

  5. java多线程快速入门(十八)

    Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线 ...

  6. java多线程快速入门(十五)

    使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { / ...

  7. java多线程快速入门(十四)

    使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurre ...

  8. java多线程快速入门(十六)

    ThreadLocal关键字实现每个线程有自己的变量 package com.cppdy; class Number { private int num; public static ThreadLo ...

  9. java多线程快速入门(十二)

    在静态方法上面加synchonizd用的是字节码文件锁 package com.cppdy; class MyThread8 implements Runnable { private static ...

随机推荐

  1. no plugin found for prefix 'tomcat 7' in the current project

    使用maven build编译出错 “no plugin found for prefix 'tomcat 7' in the current project..........” 参照下面方法 ht ...

  2. NoClassDefFound Error: com/fasterxml/jackson/annotation/JsonAutoDetect

    少了 jackson-annotation https://blog.csdn.net/qq_36497454/article/details/80461676

  3. ASP.NET MVC - 多国语言的简单实现

    定义一个类 public class Book {     public int ID { get; set; }     public string Title { get; set; }      ...

  4. 【转】数据库介绍(MySQL安装 体系结构、基本管理)

    [转]数据库介绍(MySQL安装 体系结构.基本管理) 第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新 ...

  5. CentOS6.6 双网卡双网关配置

    1.需求: 内网IP:10.63.215.7 网关:10.63.215.254 外网IP:180.168.29.92 网关:180.168.29.89 内外网均可以Ping通,可直接访问 2.IP配置 ...

  6. qemu中使用9p,支持host和guest中共享目录【转】

    转自:https://blog.csdn.net/ayu_ag/article/details/52956351 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...

  7. aix安装nmon

    aix5310以上都系统自带了nmon,其他低版本需要手动安装 软件包下载地址https://www.ibm.com/developerworks/community/wikis/home?lang= ...

  8. 【转】C++ 11 并发指南一(C++ 11 多线程初探)

    引言 C++ 11自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些C++ 11的新特性,算是记录一下自己学到的东西吧,和大家共勉. 相信Linux程序员都用过Pthrea ...

  9. hibernate框架学习第五天:数据查询、投影等

    复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...

  10. OpenCV中RGB和HSV转换的问题

    1.一般情况下HSV模型各分量的取值范围为:H为0到360°,S为0到100%,V为0到255.但是在OpenCV中在由RGB转换到HSV的过程中,发现HSV中H为0到180°,S为0到255,V为0 ...