简单的线程阻塞

来源:互联网 发布:天津网络报警平台 编辑:程序博客网 时间:2024/06/07 12:35

线程阻塞简单方法

yeild()

当调用该方法的时候,相当于告诉线程调度机制我可以不忙执行,当然这个方案不一定会执行。

本地方法public static native void yield();

join()

当调用该方法时,会产生如下效果,线程A在线程B上调用B.join()那么A线程将被挂起,直到B.isAlive()返回false的时候才会回复。我们同时可以自己调用interrupt方法来终端join()方法

public final void join() throws InterruptedException {        this.join(0L);}//默认传入参数0Lpublic final synchronized void join(long var1) throws InterruptedException {        long var3 = System.currentTimeMillis();//获取当前时间 假设1513000171971        long var5 = 0L;        if (var1 < 0L) {            throw new IllegalArgumentException("timeout value is negative");        } else {            if (var1 == 0L) { //默认穿的是0,因此进入此方法                while(this.isAlive()) { //如果这个线程一直是alive状态,那么就会等待                    this.wait(0L);                }            } else {//如果有值,则代表是一个超时参数,当超过此时间,若还没有结束,那么就自己返回                while(this.isAlive()) {                    //我们假设var1=1000                    long var7 = var1 - var5; //第一次var5是0,即var1==var7==1000                    if (var7 <= 0L) {//1000<=0L———>false                        break;//直到运行到break                    }                    this.wait(var7);//等待1000L                    //var5 = 1513000191262-1513000171971=19291                    var5 = System.currentTimeMillis() - var3;                }                           }        }    }

Sleep()

public static native void sleep(long var0) throws InterruptedException;    public static void sleep(long var0, int var2) throws InterruptedException {        if (var0 < 0L) {            throw new IllegalArgumentException("timeout value is negative");        } else if (var2 >= 0 && var2 <= 999999) {            if (var2 >= 500000 || var2 != 0 && var0 == 0L) {                ++var0;            }            sleep(var0);        } else {            throw new IllegalArgumentException("nanosecond timeout value out of range");        }    }
原创粉丝点击