Java连载106-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就可以达到我们的目的

 

package 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://github.com/ruigege66/Java/blob/master/D106_1_SleepMehthodAnalysis.java

https://github.com/ruigege66/Java/blob/master/D106_2_InterruptSleep.java

https://github.com/ruigege66/Java/blob/master/D106_3_ThreadYield.java

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

 

 

sleep()方法yield()方法Java的两个线程控制方法,它们的区别如下: 1. sleep()方法sleep()方法是Thread类的静态方法,用于让当前线程休眠一段时间,让出CPU的执行时间,以便其他线程有机会执行。具体用法如下: ```java try { Thread.sleep(1000); // 休眠1秒 } catch (InterruptedException e) { e.printStackTrace(); } ``` 2. yield()方法yield()方法也是Thread类的静态方法,用于让当前线程让出CPU的执行时间,以便其他线程有机会执行。与sleep()方法不同的是,yield()方法不会让当前线程进入休眠状态,而是将CPU时间片让给其他线程。具体用法如下: ```java Thread.yield(); // 让出CPU时间片 ``` 因此,sleep()方法yield()方法的主要区别在于: - sleep()方法会让当前线程进入休眠状态,而yield()方法不会; - sleep()方法会让出CPU的执行时间,并让其他线程有机会执行,而yield()方法只是将CPU时间片让给其他线程,但不一定会让出CPU的执行时间; - sleep()方法可以指定休眠的时间,而yield()方法不可以。 在实际编程sleep()方法通常用于模拟耗时操作或定时任务,而yield()方法用于协调多个线程之间的执行顺序,让出CPU时间片,以便其他线程能够及时响应。但是,需要注意的是,使用yield()方法并不能保证线程执行的公平性和有序性,因为线程的调度顺序是由操作系统和CPU决定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值