zoukankan      html  css  js  c++  java
  • 高并发和多线程(2)——Sleep Yield Join

    工作中用好多线程是你编码的一大亮点,手敲下Thread类下面的   Sleep Yield   Join  更好的理解下这几个方法:

    Sleep 

    让当前正在执行的线程先暂停一定的时间,并进入阻塞状态。在其睡眠的这段时间内,该线程由于不是处于就绪状态,因此不会得到任何执行的机会。

    因此即使系统中没有任何其他可执行的线程,处于sleep中的线程也不会执行。因此sleep方法经常用来暂停线程的执行,当sleep到时间后,该线程转入就绪状态,这样才能够继续执行


    static void testSleep() {
    new Thread(()->{
    for(int i=0; i<100; i++) {
    System.out.println("A" + i);
    try {
    Thread.sleep(500);
    //TimeUnit.Milliseconds.sleep(500)
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }).start();
    }



    Join

    join方法时让一个线程等待另一个线程执行完才能继续执行,如果线程B执行中调用了线程A的join方法,则线程B将会阻塞,知道线程A执行完为止,B才能继续执行


    static void testJoin() {
    Thread tA = new Thread(()->{
    for(int i=0; i<10; i++) {
    System.out.println("A" + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });

    Thread tB = new Thread(()->{

    try {
    tA.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    for(int i=0; i<10; i++) {
    System.out.println("B" + i);
    try {
    Thread.sleep(500);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });

    tA.start();
    tB.start();
    }



    Yield   

    线程让步  不会释放锁。让一个线程执行yield方法后,就会进入就绪状态,让出时间片让其他线程执行,sleep和join是进入阻塞状态。而且yield方法还与线程优先级有关,当某个线程调用yield方法时

    就会从运行状态转换到就绪状态,CPU从就绪线程队列选择一个优先级更高或者相同优先级的线程去执行。这也就意味着如果多线程的优先级是一样的,该线程调用yield方法后,也会再一次获得cpu继续去执行




    static void testYield() {
    new Thread(()->{
    for(int i=0; i<100; i++) {
    System.out.println("A" + i);
    if(i%10 == 0) Thread.yield();


    }
    }).start();

    new Thread(()->{
    for(int i=0; i<100; i++) {
    System.out.println("------------B" + i);
    if(i%10 == 0) Thread.yield();
    }
    }).start();
    }

    
    
    工作中可能用到的不多,纯粹是为了再次理解基本方法学习下,哈哈!

  • 相关阅读:
    js全选,全不选,反选练习
    linux查看系统的一些命令,留着用
    JAVA中native方法
    应该被记住的 8 位 Java 人物
    iframe里面的iframe无法左右对齐的解决方法
    sql语句,查找合并后的结果
    地址路径过深时的处理方式
    惠普中国CEO孙振耀退休感言
    js获得readOnly属性
    直接加载错误页面void com.opensymphony.xwork2.ActionSupport.addActionError(String anErrorMessage)
  • 原文地址:https://www.cnblogs.com/btdxqz/p/12711526.html
Copyright © 2011-2022 走看看