上文介绍了Tread的实例方法,本文再介绍下Thread的静态方法。ide
currentThread方法返回当前线程的Objectthis
public class Thread1 extends Thread{ static{ System.out.println(Thread.currentThread().getName()+" --> static"); } public Thread1() { System.out.println(Thread.currentThread().getName()+" --> 构造方法"); } @Override public void run() { System.out.println(Thread.currentThread().getName()+" --> run"); } }
public static void main(String[] args) { Thread1 t1 = new Thread1(); t1.start(); }
执行结果:.net
main --> static main --> 构造方法 Thread-0 --> run
Thread1在初始化的过程当中都是在主线程执行,start后开启新线程执行。线程
sleep方法是事当前线程睡眠(暂停)n毫秒。在睡眠过程当中,线程会让出cpu,但不会失去已锁定的资源。code
Thread t = new Thread(new Runnable() { @Override public void run() { try { Long t1 = System.currentTimeMillis(); System.out.println("start at:"+t1); Thread.sleep(2000); Long t2 = System.currentTimeMillis(); System.out.println("end at:"+t2); } catch (InterruptedException e) { e.printStackTrace(); } } }); t.start();
执行结果:blog
start at:1511096714406 end at:1511096716407
考虑到系统时间分配等因素,执行结果都会大于等于指定的毫秒数,但不会差太多。另外sleep方法会抛出InterruptedException 的异常,在上文中也有讲到。资源
yield方法是让出cpu的使用,让出多少时间是不肯定的。get
public class YieldTest extends Thread{ public YieldTest(String name) { super(name); } @Override public void run() { for (int i = 1; i <= 50; i++) { System.out.println("" + this.getName() + "-----" + i); if (i == 30) { this.yield(); } } } public static void main(String[] args) { YieldTest yt1 = new YieldTest("张三"); YieldTest yt2 = new YieldTest("李四"); yt1.start(); yt2.start(); } }
部分的执行结果:io
...... 张三-----28 张三-----29 张三-----30 李四-----17 李四-----18 李四-----19 李四-----20 .....
固然每次执行的结果可能都不同,这里能够看在执行到i==30时,'张三'让出了cpu使用,'李四'则开始执行。class
返回当前线程是否被中断,实现就是
return currentThread().isInterrupted(true);
holdsLock是判断某个资源是否被线程锁定,
public class Thread1 extends Thread{ private Object obj = new Object(); @Override public void run() { synchronized (obj) { System.out.println("holdsLock1="+Thread.holdsLock(obj)); } System.out.println("holdsLock2="+Thread.holdsLock(obj)); } }
public static void main(String[] args) { Thread1 t1 = new Thread1(); t1.start();
执行结果:
holdsLock1=true holdsLock2=false