jdk1.7
java.lang.Thread的一个静态方法sleep(long)
官方文档这样介绍:
下边一个例子验证wait的放弃资源和sleep的不放弃资源
public class TestSleep implements Runnable{/*** 测试Thread.sleep(10000);不会释放资源*/public synchronized void testSource(){String name = Thread.currentThread().getName();for (int i = 0;i<10; i++) {try {if(name.equals("t-1")){System.out.println("线程【"+name+"]" + "等待10s" );// 第一段代码//Thread.sleep(5000);// 第二段代码this.wait(10000);}System.out.println("线程【"+name+"]" + "打印" + i);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void run() {testSource();}public static void main(String[] args) throws Exception {TestSleep t1= new TestSleep();for (int i = 0; i < 10; i++) {Thread thread1 = new Thread(t1,"t-"+i);thread1.start();}}
}
代码内容很简单,创建10个线程,没个线程打印是个数字,当线程名称是t-1的时候等待/睡眠10s。
先测试wait,注释第一段代码,放开第二段代码,执行结果会发现,打印90多行数据,然后程序没个10s再打印一行,知道100行数据全都打印完。不管执行几次都是这样的结果,可能打印的顺序同,但最后执行完的肯定是t-1这个线程。这就说明,t-1这个线程wait的时候持有的对象锁已经放开,别的线程可以拿到进行使用。
放开第一段代码,注释第二段代码,测试sleep的不释放资源。结果显示,t-1获取到对象锁的时候就开始等待10s打印数据,不会释放对象锁,等到t-1的任务完成之后别的进程才能拿到对象锁进行打印工作。所有t-1的可能不是最后执行完的的。
本文发布于:2024-01-31 17:34:17,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170669365830220.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |