线程控制(阻塞、睡眠、让步)

1、join线程

当一个线程需要等待另一个线程执行完毕再执行的话,就调用join方法,例如,线程  A B  ,A要等B执行完再执行,则在A执行时要调用B的join方法,使A进入阻塞状态,当B执行完之后再执行A;

public class MyRunnable implements Runnable{

    @Override
    public void run() {
        for(int i=0;i<10;i++){
            if(i==5){
                MyRunnable2 my2=new MyRunnable2();
                Thread t2=new Thread(my2);
                t2.setName("join");
                t2.start();
                try {
                    t2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
    }
 
}
public class MyRunnable2 implements Runnable{

    @Override
    public void run() {
        for(int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+" "+i);
        }        
    }

}
public class Test {
    public static void main(String[] args) {
        MyRunnable my1=new MyRunnable();
        Thread t1=new Thread(my1);
        t1.start();
    }

}

2、线程睡眠

sleep(指定的毫秒数),在线程休息的时候,其他线程不会获取CPU的执行权限,如下代码:每隔一秒打印一次

public void run() {
        for(int i=0;i<10;i++){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+" "+i);
        }        
    }

3、线程让步:

线程让步和线程睡眠差不多,唯一的区别就是:在让步期间会放弃CPU的执行权限  Thread的  yiled静态方法

4、线程的优先级

线程优先级高的比较容易获得CPU的执行权限,优先级低的不太容易获得CPU的执行权限,但是当线程进行竞争是,不一定优先级高的一定会获得执行权限。

static int MAX_PRIORITY 

          线程可以具有的最高优先级。 值是10

static int MIN_PRIORITY 

          线程可以具有的最低优先级。 值是1

static int NORM_PRIORITY 

          分配给线程的默认优先级。   值是5

原文地址:https://www.cnblogs.com/wintersong/p/4752080.html