java中while循环线程被挂起的讨论,大家进来研究下

xxj054100221 2013-01-16 09:14:18
package com.obj;


public class TestClass {

private static boolean isdo = true;
public void test() {
/**
* 多线程情况是否会出现线程挂起现象,线程挂起后是否会被唤起
*/
while(!isdo) {
}
if (this.isdo == true) {//上一个线程处理完成标志
this.isdo = false;
}
}
}

这个代码多线程调用的情况,会出现部分线程被挂起,如果在while 中加入输入信息就不会被挂起,这是什么原因;部署weblogic 下面
...全文
624 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kanepan 2013-01-18
  • 打赏
  • 举报
回复
2L 正解。。。。。
龙四 2013-01-16
  • 打赏
  • 举报
回复
http://www.ticmy.com/?p=5 private static boolean isdo = true; -> private static volatile boolean isdo = true; 应该是JVM优化后可见性导致的问题
赏金--猎人 2013-01-16
  • 打赏
  • 举报
回复
关键是你要在while中加什么语句呀,加上一条打印语句你试试,能不能被挂起
TKD03072010 2013-01-16
  • 打赏
  • 举报
回复
引用 2 楼 ticmy 的回复:
http://www.ticmy.com/?p=5 private static boolean isdo = true; -> private static volatile boolean isdo = true; 应该是JVM优化后可见性导致的问题
2楼的解说已经很明确了,这是由于不能保证java内存模型——可见性问题引起的。 http://blog.csdn.net/tkd03072010/article/details/8506195 这边举个例子可以看看
xxj054100221 2013-01-16
  • 打赏
  • 举报
回复
我贴出来的只是一部分代码,实际的代码 和 ticmy 的类似 http://www.ticmy.com/?p=5
rome_wu 2013-01-16
  • 打赏
  • 举报
回复
你根本就没用到多线程
笑莫问 2013-01-16
  • 打赏
  • 举报
回复
volatile 貌似就等于加上同步了吧。。。。。。。
xxj054100221 2013-01-16
  • 打赏
  • 举报
回复
感谢ticmy
xxj054100221 2013-01-16
  • 打赏
  • 举报
回复
我加上打印语句,就不会被挂起了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧