java多线程快速入门(十九)
如何停止线程
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多线程快速入门(十九)的更多相关文章
- java多线程快速入门(九)
		
多线程安全问题(卖火车票案例) package com.cppdy; class MyThread5 implements Runnable{ private Integer ticketCount= ...
 - java 多线程 快速入门
		
------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有 ...
 - java多线程快速入门(二十二)
		
线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接 ...
 - java多线程快速入门(二十)
		
1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 ...
 - java多线程快速入门(十八)
		
Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线 ...
 - java多线程快速入门(十五)
		
使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { / ...
 - java多线程快速入门(十四)
		
使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurre ...
 - java多线程快速入门(十六)
		
ThreadLocal关键字实现每个线程有自己的变量 package com.cppdy; class Number { private int num; public static ThreadLo ...
 - java多线程快速入门(十二)
		
在静态方法上面加synchonizd用的是字节码文件锁 package com.cppdy; class MyThread8 implements Runnable { private static ...
 
随机推荐
- Jupyter 同时支持python2, python3
			
从docker hub 下载了一个 tensorFlow 镜像,但是里面只支持python2.7 kernel, 不支持python3 kernel. 1. Notebook的右上角点new 只看到 ...
 - vue-CLI踩坑记
			
vue init webpack vue-demo 使用 windows 7 DOS命令行和gitbash都有选择和实际选择结果不一致的问题, DOS命令行只在 Vue build有问题, gitba ...
 - jQuery的节点添加、删除、替换等操作
			
//几种添加节点的方法 //$("p").append("<b>你好吗?</b>");//向p元素中追加<b> //$(&q ...
 - Django REST framework 第六章 ViewSets & Routers
			
REST framework包含了一个可以处理ViewSets的抽象, 它允许开发人员专注于API的状态跟交互进行建模,并使得URL构建结构基于通用的约定自动处理. ViewSet类跟View类几乎相 ...
 - java SPI & spring factories
			
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个接口,想运行时动态的给它添加实现,你只需要添加 ...
 - jsp映射为其他地址上去   ???
			
在web.xml 里面配置servlet不起作用,所以配置jsp,然后在jsp里面跳转到servlet去 ??? 第八天中的<08-jsp常用标签.avi> 在web.xml里面先设 ...
 - CF1100B Build a Contest
			
题目地址:CF1100B Build a Contest 水题,比赛时没想就敲了个 \(O(n^2)\) 的暴力上去,结果过了Pretest,然后被Hack了 两个数组: \(c_i\) 表示 \(i ...
 - Shell-find . -type f -name "*.php" -print0 | xargs -0 wc -l
			
统计一个源代码目录中所有 php 文件的行数
 - Tomcat  部署及配置
			
下载,解压tomcat.jdk 1.解压,链接tomcat.jdk tar xf jdk-8u161-linux-x64.tar.gz .tar.gz .0_161/ /usr/local/ .0_1 ...
 - 解决flask中文乱码的问题
			
from flask import Flask,jsonify app = Flask(__name__) #使用jsonify模块来让网页直接显示json数据 @app.route('/json') ...