Java sleep方法及中断方式、yield方法代码实例
作者:心悦君兮君不知-睿 发布时间:2023-10-22 10:59:49
标签:Java,sleep,中断,yield
一、多线程的sleep方法
1.Thread.sleep(毫秒)
2.sleep方法是一个静态方法
3.该方法的作用:阻塞当前线程,腾出CPU,让给其他线程
4.sleep的异常注意事项,以及中断休眠的一种方式及其注意点
package com.bjpowernode.java_learning;
public class D106_1_ {
public static void main(String[] args) throws InterruptedException{
Processer106 p1 = new Processer106();
p1.start();
//需求:子线程启动后0.5s之后打断它的休眠
Thread.sleep(500);
p1.interrupt();
//这样就会是子线程打断休眠
//这个底层的实现方法是一个调用中断异常的方式,因此,这个休眠之后的操作就不会执行了
//在这个代码中就会直接进行下一次循环
for (int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"---->"+i);
//下面这个语句也可以使用对象.sleep();因为sleep方法是一个静态方法。
//即p1.sleep(200);这个main线程也会休眠200ms
Thread.sleep(200);
}
}
}
class Processer106 extends Thread{
//Thread中的run方法不抛出异常,因此重写run方法,在run方法的声明位置不能使用throws
//所以run方法中只能使用try...catch.....
public void run() {
for (int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
try {
Thread.sleep(1000);
//当前线程阻塞1s
System.out.println(i);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
//m1方法是可以使用throws的
}
二、如何正确的停止一个线程(不使用interrupt方法)
使用一个flag就可以达到我们的目的
packagepackage com.bjpowernode.java_learning;
public class D106_2_InterruptSleep {
public static void main(String[] args) throws Exception{
Processer106_2 p = new Processer106_2();
Thread t = new Thread(p);
t.setName("t");
t.start();
//5s之后终止
Thread.sleep(5000);
p.run1 = false;
//这种非异常的方法更好,因为不会抛出异常。
}
}
class Processer106_2 implements Runnable{
Boolean run1 = true;
public void run() {
for (int i=0;i<10;i++) {
if(run1) {
try {
Thread.sleep(1000);
}
catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-->"+i);
} else {
return;
}
}
}
}
三、Thread.yield
1.该方法是一个静态方法
2.作用:给同一个优先级的线程让位,但是让位时间不固定
3.和sleep方法相同,就是yield时间不固定
package com.bjpowernode.java_learning;
public class D106_3_ThreadYield {
public static void main(String[] args) throws InterruptedException {
Processer106_3 p = new Processer106_3();
Thread t = new Thread(p);
t.setName("t");
t.start();
//在主线程中
for (int i=0;i<1000;i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
class Processer106_3 implements Runnable{
public void run() {
for (int i=0;i<1000;i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
if(i%20 == 0) {
Thread.yield();
}
}
}
}
四、源码:
D106_1_SleepMehthodAnalysis.java
D106_2_InterruptSleep.java
D106_3_ThreadYield.java
来源:https://www.cnblogs.com/ruigege0000/p/12640147.html


猜你喜欢
- Maven导入thymeleaf依赖飘红1、运行环境操作系统:win10jdk版本:1.8idea版本:2020.1maven版本:3.3.
- 本文实例讲述了Android编程之ActionBar Tabs用法。分享给大家供大家参考,具体如下:这里主要实现用Tab切换不同的Fragm
- 本文实例为大家分享了Java实现图形界面计算器的具体代码,供大家参考,具体内容如下 代码:import javax.swing.*
- public void ProcessRequest (HttpContext context) { &n
- 在前面一篇Java Comparable和Comparator对比详解中,对于java中的排序方法进行比较和具体剖析,主要是针对 Compa
- 调用微信接口前需要准备的内容。1.微信公众平台的appid2.微信公众平台的secret3..获取tokenid4.获取ticket5.生成
- 报错:Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLeni
- 更正说明:我之前的的标题有点文不对题,我这篇博客的内容明明说的是:java中对象创建的过程,对内存之种底层的东西,我其实提的不太多。所以我原
- 一、实现了Aware的接口Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的,下面我们就一起来看看吧。Aware 接口
- 如下所示:for (int i= 0; i<= 1084; i++) {if (String.valueOf(i+1).length(
- 大多数android程序员应该都知道genymotion是一个不错的模拟器,体积小巧,启动速度快。相关的博客也比较多,但是一直以来无法解决a
- 本文实例讲述了Java文本文件操作方法。分享给大家供大家参考。具体分析如下:最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了
- 前言Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,
- 本来是想写一篇《委托与lambda表达式的前世今生》,但仅委托部分已经写了很多内容,于是就此分开关于Lambda表达是的内容后续再写吧。不知
- Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的
- 最近学习了一个视频公开课,讲到了利用HorizontalScrollView仿ViewPager设计的一个简单相册,其实主要用了ViewPa
- 线程可以有六种状态:1.New(新创建)2.Runnable(可运行)(运行)3.Blocked(被阻塞)4.Waiting(等待)5.Ti
- Eureka注册的服务之间互相调用1.请求方启动类添加注解,扫描Eureka 中的全部服务@SpringBootApplication@En
- 项目框架采用spring+hibernate+springMVC如果上传文件不想使用flash那么你可以采用HTML5;截图前段模块是boo
- 一. 概念简介在开始学习今天的知识之前,有必要先给大家讲解一下与今天内容相关的一些概念,否则可能会让一些小白产生迷惑。1. 日期和时间的区别