java多线程(3)Thread的静态方法
来源:互联网 发布:8264户外论坛推荐淘宝 编辑:程序博客网 时间:2024/06/09 23:52
上文介绍了Tread的实例方法,本文再介绍下Thread的静态方法。
currentThread()
currentThread方法返回当前线程的Object
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();}
执行结果:
main --> staticmain --> 构造方法Thread-0 --> run
Thread1在初始化的过程中都是在主线程执行,start后开启新线程执行。
sleep()
sleep方法是事当前线程睡眠(暂停)n毫秒。在睡眠过程中,线程会让出cpu,但不会失去已锁定的资源。
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();
执行结果:
start at:1511096714406end at:1511096716407
考虑到系统时间分配等因素,执行结果都会大于等于指定的毫秒数,但不会差太多。另外sleep方法会抛出InterruptedException 的异常,在上文中也有讲到。
yield()
yield方法是让出cpu的使用,让出多少时间是不确定的。
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(); } }
部分的执行结果:
......张三-----28张三-----29张三-----30李四-----17李四-----18李四-----19李四-----20.....
当然每次执行的结果可能都不一样,这里可以看在执行到i==30时,’张三’让出了cpu使用,’李四’则开始执行。
interrupted()
返回当前线程是否被中断,实现就是
return currentThread().isInterrupted(true);
holdsLock(Object obj)
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=trueholdsLock2=false
阅读全文
0 0
- java多线程(3)Thread的静态方法
- Java多线程3:Thread中的静态方法
- Java多线程3:Thread中的静态方法
- Java多线程 Thread 方法
- 3、java多线程--Thread的三个中断相关方法
- Java多线程学习 (二) Thread的join()方法
- Java多线程学习 (三) Thread的wait()方法执行
- (2)Java多线程Thread提供的方法
- java多线程(2)Thread的实例方法
- java多线程-Thread类的一些方法
- java多线程创建Thread方法
- Java的多线程:Thread类的Join()方法
- java 三种多线程的创建方法Thread,Handler,Runnable
- java 三种多线程的创建方法Thread,Handler,Runnable
- Java 中多线程的实现方法之Thread和Runnable
- Java 多线程中 Thread类 join方法的使用
- Java实现多线程的2种方法( Thread ,Runnable )
- Java多线程之Thread的run()与start()方法解析
- 20171119
- hihocoder1158 质数相关
- TensorFlow学习_note2
- 【练习】算术表达式求值
- Piggy-Bank-HDU1114-完全背包
- java多线程(3)Thread的静态方法
- Max Sum Plus Plus HDU
- Vjudge Oil Deposits 油田问题(dfs)
- openlayers3+Arcgis Server跨域问题 代理解决方式
- 在输入的一系列正整数中求出最大者,输入0结束循环。
- PAT单链表逆转
- 空间两条直线段的最短距离及最近点计算
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现
- HDU OJ ACM Steps 上的题目详细介绍