关于java多线程的问题。。新人求解答

yh0123123 2012-07-06 08:38:46
看书看到多线程的时候,书上讲到了线程同步的内容,然后是举了个例子,代码如下
class My implements Runnable{
private int count =0;
public void run(){
test();
}
private void test(){
for(int i=0;i<10;i++){
count++;
Thread.yield();
count--;
System.out.println(count);
}
}

}
public class Test {
public static void main(String args[]) throws InterruptedException{
My t=new My();
Thread t1=new Thread(t);
Thread t2=new Thread(t);

t1.start();
t2.start();
}

}
书上给的例子是运行结果变得很奇怪,打印了很多-1,没什么规律,但是我自己测试时全都是0 ,- -。书上后面加了Synchronized关键字说是运行结果全为0,不知道这是为什么。
还有t1,t2不是两个对象么?他们的count为什么是共享的?
嫩鸟求救啊,谢谢了。
...全文
106 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyun_2012 2012-07-06
  • 打赏
  • 举报
回复
同看看 多线程 正在学习中
brightyq 2012-07-06
  • 打赏
  • 举报
回复
先说第二个问题
Thread t1=new Thread(t);
Thread t2=new Thread(t);
这里t是同一个My对象,也就是说两个线程走的是同一个代码,用的是同一个变量count.

再说第一个问题,书上说打印好多-1?
虽然是多线程,两个线程可能同时访问test方法,但只要执行count--前肯定要先执行count++。
所以应该不会出现打印-1的情况,倒是可能出现打印1的情况,楼主看看是不是说错了。
你将循环次数修改大点,比如一千,就可以看到效果了。

加synchronize的目的就是为了线程同步,两个线程不能同时访问test方法。避免出现打印有时0,有时1的情况。
MiceRice 2012-07-06
  • 打赏
  • 举报
回复
这类测试本来就未必稳定。你可以增加循环次数看看效果。

“还有t1,t2不是两个对象么?他们的count为什么是共享的?”
My t=new My();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
你没注意两个Thread其实共享了一个 My 对象么?
HTML 5规范呼之欲出,各浏览器厂商更早已摩拳擦掌,纷纷推出支持HTML 5规范的浏览器:Firefox、Opera、Chrome等浏览器早已很好地支持各种HTML 5规范,微软也宣布IE 9将会更好地支持CSS 3、SVG和HTML 5等新规范,这些迹象表明:HTML 5时代到来了。 本书是一本全面介绍HTML 5、CSS 3和JavaScript前端开发技术的图书,系统地介绍了HTML 5常用的元素和属性、HTML 5的表单元素和属性、HTML 5的绘图支持、HTML 5的多媒体支持、CSS 3的功能和用法、最前沿的变形与动画功能等。除此之外,本书还系统地介绍了JavaScript编程知识,包括JavaScript基本语法、DOM编程,以及HTML 5新增的本地存储、离线应用、JavaScript多线程、客户端通信支持、WebSocket编程等。 本书的定位是一本前端开发的“实战性”图书,因此在介绍各知识点时并不是简单地停留在知识点层面阐述,而是结合了大量实例来让读者对照练习、学以致用。本书最后还提供了一个基于HTML 5技术的小游戏:疯狂俄罗斯方块。该游戏综合运用了HTML 5的绘图支持、客户端存储等技术,具有较高的参考价值。本书提供了配套的疑网站,如果读者在阅读本书时遇到了技术问题,可以登录疯狂Java联盟发帖,笔者将会及时予以解。 本书对HTML 5、CSS 3、JavaScript的介绍是“从零开始”的,因此阅读本书并不需要额外的基础。对于刚刚从事前端开发的新人,本书具有很好的学习价值;对于有一定工作经验的前端工程师,本书具有很高的参考价值。本书也可作为高校、培训机构的培训教材。
HTML 5规范呼之欲出,各浏览器厂商更早已摩拳擦掌,纷纷推出支持HTML 5规范的浏览器:Firefox、Opera、Chrome等浏览器早已很好地支持各种HTML 5规范,微软也宣布IE 9将会更好地支持CSS 3、SVG和HTML 5等新规范,这些迹象表明:HTML 5时代到来了。 本书是一本全面介绍HTML 5、CSS 3和JavaScript前端开发技术的图书,系统地介绍了HTML 5常用的元素和属性、HTML 5的表单元素和属性、HTML 5的绘图支持、HTML 5的多媒体支持、CSS 3的功能和用法、最前沿的变形与动画功能等。除此之外,本书还系统地介绍了JavaScript编程知识,包括JavaScript基本语法、DOM编程,以及HTML 5新增的本地存储、离线应用、JavaScript多线程、客户端通信支持、WebSocket编程等。 本书的定位是一本前端开发的“实战性”图书,因此在介绍各知识点时并不是简单地停留在知识点层面阐述,而是结合了大量实例来让读者对照练习、学以致用。本书最后还提供了一个基于HTML 5技术的小游戏:疯狂俄罗斯方块。该游戏综合运用了HTML 5的绘图支持、客户端存储等技术,具有较高的参考价值。本书提供了配套的疑网站,如果读者在阅读本书时遇到了技术问题,可以登录疯狂Java联盟发帖,笔者将会及时予以解。 本书对HTML 5、CSS 3、JavaScript的介绍是“从零开始”的,因此阅读本书并不需要额外的基础。对于刚刚从事前端开发的新人,本书具有很好的学习价值;对于有一定工作经验的前端工程师,本书具有很高的参考价值。本书也可作为高校、培训机构的培训教材。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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