• 高并发和多线程(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();
    }

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

  • 相关阅读:
    1.2 软件测试的分类和职业生涯
    1.1:软件测试的发展
    1,select查询详解
    7、网页
    6、开学典礼
    5、边框属性和display
    4、盒子模型和margin、padding
    3、字体、背景、和文本的属性
    2、Css中的样式选择器
    16. C# 对象初始化器
  • 原文地址:https://www.cnblogs.com/btdxqz/p/12711526.html
Copyright © 2020-2023  润新知