线程让位与线程合并

一、线程让位

image-20220730093548677

Thread.yield();/是让当前线程赞停回到就绪状态,让给其他线程先执行,等执行之结束再继续执行

我们写个例子,一个t线程一个main线程,我们分别让两个线程循环打印10000个数字。让t线程每隔1000个让位一次。

代码示例:

public class ThreadTest12 {
    public static void main(String[] args) {
        Thread thread=new Thread(new Thread12());
        thread.setName("t");
        thread.start();
        for (int i = 1; i <= 10000; i++) {
            System.out.println(Thread.currentThread().getName()+"----->"+i);
        }
    }

}
class Thread12 implements Runnable{
    @Override
    public void run() {
        for (int i = 1; i <= 10000; i++) {
            //每1000个让位一次
            if (i % 1000 == 0) {
                Thread.yield();//当前线程暂停一下
            }else {
                System.out.println(Thread.currentThread().getName() + "----->" + i);
            }
        }
    }
}

输出结果:

idea64_F4O1JUUVD5

二、线程合并(等待线程死亡)

image-20220730094653330

join是合并到一个线程,也可以说是等待线程死亡!为什么这么说呢?

例如,我们有一个t线程一个main线程。当我们把t线程合并到main线程中去,t线程限制性,等t线程执行之后继续执行main线程。那么t线程执行之后就是死亡,相当于是等待t线程死亡。只是这个线程是正常死亡的。

而如果给join后面跟一个参数,就是等待线程死亡的时间,我们可以这样理解,其他线程等合并进来的线程死亡,默认是等它执行结束,加时间参数话就是等它这个时间参数,过了这个时间参数,就不再等它死亡!

先看一下不加参数的时候,线程的合并

代码示例:

package com.thread;

public class ThreadTest13 {
    public static void main(String[] args) {
        System.out.println("begin");
        Thread t=new Thread(new Thread13());
        t.setName("t");
        t.start();
        System.out.println("main");
        //合并线程
        try {
            t.join();//t合并到当前线程,当前线程受阻塞,t执行,直到t执行结束
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main over");
        System.out.println("end");
    }
}
class  Thread13 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);

        }
    }
}

输出:

image-20220730095802325

可以看出是当t线程执行完之后main线程开始执行

现在我们给join加上时间参数,看是不是只等待这个时间参数里面的时间,因为现在电脑运行过快,所以我们把时间设置为1毫秒

只需要把上面代码的这一行改一下即可

t.join(1);

输出:

idea64_QO60pqui59

posted @ 2022-07-30 10:12  星余明  阅读(54)  评论(0编辑  收藏  举报