因为大多数人的电脑都是多核的,所以 yield 不太好测试。
这里通过资源的互斥使用,证明 yield 不会释放对象锁。
具体例子如下。
package threadtest.waitNotifyJoin;
/**
* yield 和 sleep test,通过Runnable接口实现多线程
*
* @author Administrator
*/
public class ThreadYieldAndSleepTest implements Runnable {
private int count = 0;// 系统访问次数
@Override
public synchronized void run() {// 通过synchronized实现同步
count++;
try {
if (count == 1) {
/// <注>. sleep 和 yield 都不会释放 <锁资源>。
// Thread.sleep(5000);
Thread.yield();
// this.wait();
}
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(Thread.currentThread().getName() + "线程: " + "第" + count + "位访客来啦!");
}
public static void main(String[] args) {
ThreadYieldAndSleepTest rd = new ThreadYieldAndSleepTest();
for (int i = 1; i <= 50; i++) {
Thread thread = new Thread(rd, String.valueOf(i));
thread.start(); // 一定要注意不是通过.run()启动线程
}
}
}
执行多遍,结果可发现,都是首先输出:1线程: 第1位访客来啦!
所以可以看出 yield 不会释放对象锁,别的线程进入不了。