线程控制(阻塞、睡眠、让步)
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