java – 执行顺序和Thread.sleep
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 执行顺序和Thread.sleep,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1403字,纯文字阅读大概需要3分钟。
内容图文
![java – 执行顺序和Thread.sleep](/upload/InfoBanner/zyjiaocheng/733/14247d1c0a9745d286e73a0e0897b266.jpg)
最近我看到一些代码依赖于不同线程中的执行顺序,这是通过调用Thread.sleep来实现的.它没有任何问题,但我确信在某些罕见的情况下它不会.我写了一些代码,其中输出顺序取决于Thread.sleep的精确程度.
public class Test {
public static Thread createDelayedPrintThread(final String text,
final long delay) {
return new Thread() {
public void run() {
try {
Thread.sleep(delay);
System.out.print(text);
} catch (InterruptedException e) {
}
}
};
}
public static void main(String[] args) {
Thread t1 = createDelayedPrintThread("t1", 10);
Thread t2 = createDelayedPrintThread("t2", 10);
t1.start();
t2.start();
}
}
这段代码不经意地可以输出booth t1t2和t2t1,所以我的延迟不同:
Thread t1 = createDelayedPrintThread("t1", 10);
Thread t2 = createDelayedPrintThread("t2", 20);
现在它输出t1t2但我仍然有时得到t2t1.它通常发生在我进行一些CPU / IO密集型操作时.
如果我将延迟更改为非常大的值
Thread t1 = createDelayedPrintThread("t1", 1_000); // one second
Thread t2 = createDelayedPrintThread("t2", 60_000); // one minute
将有任何保证应用程序将输出t1t2?
解决方法:
首先,你的理解是正确的;没有任何Thread.sleep()(顺便说一句,因为Java 5你真的应该使用TimeUnit而不是像TimeUnit.SECONDS.sleep(2L)那样)将保证按顺序执行;您无法保证操作系统何时安排此线程或该线程.
would be there any guarantees that the application will output t1t2?
是.
例如,这两个线程共享的一个易失性布尔变量就可以了(虽然你需要忙等待,所以这并不理想).另一个例子是Semaphore.
解决方案很多,您最终将完全取决于您的要求.
内容总结
以上是互联网集市为您收集整理的java – 执行顺序和Thread.sleep全部内容,希望文章能够帮你解决java – 执行顺序和Thread.sleep所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。