网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  一个容易疏忽的多线程程序陷阱     
  文章作者:未知  文章来源:水木森林  
  查看:83次  录入:管理员--2007-11-17  
 

注意这段代码:

public class demo{public static void main(string[] args)

{

 myrunnable r=new myrunnable();

new thread(r).start();// thread one

r.cache=false;

new thread(r).start();// thread two

}

}

class myrunnable implments runnable {

boolean cache=true;

public void run()

{

  while(true)

{

 if(cache)

 system.out.println("this is thread one!");

 else

system.out.println("this is thread two!");

}

}

}

也许我们要达到的效果是:交错打印"this is thread one!"和"this is thread two!";但是事实上却总是打印"this is thread two!";

为什么会出现上面的现象呢?因为主线程享有一个时间片,如果一个时间片足够长,那么当执行了 new thread(r).start();// thread one这句后,主线程继续在运行,thread one 将被迫等待,也就是说这个线程并没有运行;当执行了 r.cache=false;以及后面的 new thread(r).start();// thread two后,主线程结束,这时候等待已久的thread one运行起来,可是这个时候它看见的r.cache并不是我们想要的true,而已经在主线程中被修改成了false,所以thread one 和thread two 都只会打印"this is thread two!".

 
 
上一篇: 用 java 保存位图文件(转)    下一篇: 一个体现java接口及工厂模式优点的例子
  相关文档
jsp初学者必须掌握的语法点概要 11-17
充分利用j2ee enterprise blueprint 11-17
sun公司推java认证取得成功 11-17
从数据库读出的jpg文件的字符流,转换成图片显示在页面上的相关? 11-17
java基础-hibernate o/r映射三大基本定则 11-16
javascript实现网页图片等比例缩放效果 06-26
java servlet api类库中的基本方法介绍 11-16
java性能优化通用篇 11-17
java语言异常处理的陋习展播 11-20
快速开发时可以使用的java文件工具方法 11-16
java基础知识:初学者应知道的kvm常量池 11-16
spring framework中的面向方面编程 11-16
java数组和jav集合类的操作 11-17
x3d实战基础讲座之二 11-17
sun jdk/jre 执行禁止类漏洞 11-17
创建 jsf web 项目和页面模板(1) 11-17
对map技巧的一点总结:获得map中的数据 11-16
java环境配置大全 11-17
java技术专题综述之内部类篇 11-17
实用技巧 java类型转换与强制类型转换 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息