
Java终止与暂停线程
发布日期:2021-05-07 14:41:17
浏览次数:20
分类:技术文章
本文共 2224 字,大约阅读时间需要 7 分钟。
终止线程的典型方式:
终止线程我们一般不使用JDK提供的stop()/destroy()方法(它们本身也被JDK废弃了)。通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行。
终止线程的典型方法:
public class TestThreadCiycle implements Runnable { String name; boolean live = true;// 标记变量,表示线程是否可中止; public TestThreadCiycle(String name) { super(); this.name = name; } public void run() { int i = 0; //当live的值是true时,继续线程体;false则结束循环,继而终止线程体; while (live) { System.out.println(name + (i++)); } } public void terminate() { live = false; } public static void main(String[] args) { TestThreadCiycle ttc = new TestThreadCiycle("线程A:"); Thread t1 = new Thread(ttc);// 新生状态 t1.start();// 就绪状态 for (int i = 0; i < 100; i++) { System.out.println("主线程" + i); } ttc.terminate(); System.out.println("ttc stop!"); }}
执行结果如图所示:(因为是多线程,故每次运行结果不一定一致)
暂停线程执行sleep/yield:
暂停线程执行常用的方法有sleep()和yield()方法,这两个方法的区别是:
1. sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状态。
2. yield()方法:可以让正在运行的线程直接进入就绪状态,让出CPU的使用权。
暂停线程的方法-sleep():
public class TestThreadState { public static void main(String[] args) { StateThread thread1 = new StateThread(); thread1.start(); StateThread thread2 = new StateThread(); thread2.start(); }}//使用继承方式实现多线程class StateThread extends Thread { public void run() { for (int i = 0; i < 100; i++) { System.out.println(this.getName() + ":" + i); try { Thread.sleep(2000);//调用线程的sleep()方法; } catch (InterruptedException e) { e.printStackTrace(); } } }}
执行结果如图11-6所示(注:以下图示只是部分结果,运行时可以感受到每条结果输出之前的延迟,是Thread.sleep(2000)语句在起作用):
暂停线程的方法-yield():
public class TestThreadState { public static void main(String[] args) { StateThread thread1 = new StateThread(); thread1.start(); StateThread thread2 = new StateThread(); thread2.start(); }}//使用继承方式实现多线程class StateThread extends Thread { public void run() { for (int i = 0; i < 100; i++) { System.out.println(this.getName() + ":" + i); Thread.yield();//调用线程的yield()方法; } }}
运行效果:
注:以下图示只是部分结果,可以引起线程切换,但运行时没有明显延迟
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月26日 11时08分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
错误: 编码GBK的不可映射字符
2019-03-04
html img点击跳转网页
2019-03-04
Python-Url编码和解码
2019-03-04
windows环境下生成ssh keys
2019-03-04
2019年一个程序员的回顾与成长计划
2019-03-04
vue 双项绑定的实例 货币转换
2019-03-04
vue if else用法。
2019-03-04
vue 官方实例教程 markdown demo
2019-03-04
Python数据类型 列表、元组、集合、字典的区别和相互转换
2019-03-04
宝塔配置404 502页面
2019-03-04
Mac OS X 下 su 命令提示 sorry 的解决方法
2019-03-04
vue-router 缓存路由组件对象
2019-03-04
js中事件捕获和事件冒泡(事件流)
2019-03-04
js的各种数据类型判断(in、hasOwnProperty)
2019-03-04
严格模式、混杂模式与怪异模式
2019-03-04
一篇文章带你搞定 Java 中字符流的基本操作(Write / Read)
2019-03-04
HTML 和 CSS 简单实现注册页面
2019-03-04
(Java)让枚举实现一个接口
2019-03-04
XML 解析学习
2019-03-04