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 ...
随机推荐
- luogu P4173 残缺的字符串
传送门 两种做法,一种是依次考虑每种字符,然后如果某个位置是该字符或者是\(*\)对应的值就是1,否则是0,然后把第一个串倒过来,fft卷积起来,最后看对应位置的值是否为m 然而上面那个做法在字符集大 ...
- 牛客寒假算法基础集训营4 F(二分+拓扑判环)
题目链接 题目的输出:对于每次提问,输出一行"Yes"表示大家都遵守了群规,反之输出"No". 那么输出的就是一连串的yes和no了,二分一下无环的最大提问位置 ...
- 前端向服务器请求数据并渲染的方式(ajax/jQuery/axios/vue)
原理: jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会显示(成功或者失败都显示数据): return result
- 【译】第十一篇 SQL Server安全审核
本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...
- shiro 启动异常
原因是:LoginController中用到,自动注入,要配置在 /permission1110/config/spring/applicationContext-service.xml中配置bean ...
- Elasticsearch 5.4.3实战--Java API调用:搜索
ES有多种查询方式,我自己的业务是需要对多个字段进行查询,具体实现类代码如下. package com.cs99lzzs.elasticsearch.service.imp; import java. ...
- 嵌入式系统C编程之堆栈回溯【转】
转自:https://www.cnblogs.com/clover-toeic/p/3949896.html 前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便 ...
- 关于 DELPHI DATASNAP 的文章集
关于 DELPHI DATASNAP 的文章集: 1.墨者工作室 DataSnap基础 https://wenku.baidu.com/view/78715605cc1755270722088b. ...
- CentOS 6与7对比【转】
片段1:时间同步 CentOS 6 逐步: ntpd或ntpdate 直接: ntpdate -b(通常加到crontab) CentOS 7 方法1: systemctl start chronyd ...
- vc++高级班之窗口篇[4]---让程序只运行一个实例
大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...