zoukankan      html  css  js  c++  java
  • 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.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12640147.html
Copyright © 2011-2022 走看看