Java线程小结(一)(二)

2014-11-24 08:54:10 · 作者: · 浏览: 1
run方法作为线程执行体
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + " " + i);
if (i == 20) {
Thread.yield();
}
}
}
public static void main(String[] args) {
// 启动两个并发线程
YieldThread yt1 = new YieldThread("高级");
// 将yt1线程设置成为最高优先级
yt1.setPriority(Thread.MAX_PRIORITY);
yt1.start();
YieldThread yt2 = new YieldThread("低级");
// 将yt2线程设置成为最低优先级
yt2.setPriority(Thread.MIN_PRIORITY);
yt2.start();
}
}
五、sleep方法和yield方法的区别
1,sleep方法暂停当前线程后,会给其他线程执行机会,不会理会其他线程的优先级,但yield方法只会给优先级相同或优先级更高的线程执行机会。
2,sleep方法会将线程转入阻塞状态,直到经过阻塞时间,才会转入就绪状态,而yield方法不会将线程转入阻塞状态,它只是强制当前线程进入就绪状态,因此完全有可能某个线程用yield方法暂停之后立即再次获得处理器资源被执行。
3,sleep方法声明抛出 InterruptedException 异常。所有调用sleep方法时,要么扑捉该异常,要么显示声明抛出该异常。而yield方法则没有声明抛出任何异常。
4,sleep方法比yield方法有更好的可移植性,通常不用依靠yield方法来控制并发线程的执行。
案例:
package com.xiaomo.thread;
import java.util.Date;
public class SleepThread {
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; i++) {
System.out.println("当前时间:" + new Date() + "--->" + i);
// 调用sleep方法让当前线程暂停1s
Thread.sleep(1000);
}
}
}