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 ...
随机推荐
- cookie、session、sessionStorage 、localStorage 区别
1> cookie在浏览器与服务器之间来回传递,在想服务器发送请求时,web浏览器会自动携带cookie. sessionStorage和localStorage不会把数据发给服务器,仅在本地保 ...
- 【tmos】shell工具推荐
xshell(推荐) putty
- netty 在线教程
https://blog.csdn.net/qq_33314107/article/details/81321438 https://www.cnblogs.com/myJavaEE/p/679333 ...
- MySql cmd下的学习笔记 —— 有关select的操作(in, and, where, like等等)
为方便本节学习, 请先自行建立本表: 建一个商品表: create table goods ( -> goods_id mediumint(8) unsigned not null auto_i ...
- MySql cmd下的学习笔记 —— 有关表的操作(对表的增删改查)
create table 表名 ( 列名1 列属性, 列名2 列属性 ... ... 列名n 列属性 )engine myisam charset utf8; (增加表的一列) (一)在表的最末列增加 ...
- centos设置服务开机启动失败问题
1.安装某服务设置开机启动的时候报错 [root@node1 ~]# systemctl enable lvm2-lvmetad.serviceThe unit files have no [Inst ...
- 对象及变量的并发访问(同步方法、同步代码块、对class进行加锁、线程死锁)&内部类的基本用法
主要学习多线程的并发访问,也就是使得线程安全. 同步的单词为synchronized,异步的单词为asynchronized 同步主要就是通过锁的方式实现,一种就是隐式锁,另一种是显示锁Lock,本节 ...
- Python对HDFS的一些基础操作
链接: http://www.cnblogs.com/shoufengwei/p/5949791.html
- 【VMware vSphere】vCenter添加主机失败:无法访问指定主机
背景 前一段时间,给一台服务器安装ESXi系统,安装成功之后,通过vCenter在上面安装了一台VDP系统.结果前几天发现服务器掉线,重新连接时出现问题.问题描述如下: 其中错误堆栈具体内容为:在 v ...
- Liunx系统命令sed的使用
作者:邓聪聪 Liunx命令中sed的使用历程 sed [-nefr] [动作]选项与参数:-n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出 ...