一个线程同步问题

zhaoke5421 2006-03-14 09:42:10
最近在学java 看到线程同步的时候遇到这样一个问题 代码如下:
public class BasicThread {
private int count = 0;

public BasicThread() {
new IncreateThread().start();
new printThread().start();
}

/**
* 以下两个函数以同步的方式访问count
*
*/
private synchronized void increate() {
count++;
MyTools.sleep(100);// 包装了Thread.sleep(100)
}

private synchronized void myPrintln() {
System.out.println(count);
MyTools.sleep(100);
}

/**
* 以下两个线程分别调用上边的函数
*
*
*/
class IncreateThread extends Thread {
public void run() {
while (true) {
increate();
}
}
}

class printThread extends Thread {
public void run() {
while (true) {
myPrintln();
}
}
}

public static void main(String[] args) {
new BasicThread();
}
}

按理说IncreateThread启动以后就进入increate函数、进入了while死循环 也就取得了对象机锁。另一个线程printThread就不可能有机会执行myPrintln函数。但是结果恰恰相反,请高手指教。。。。。
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzl32 2006-03-21
  • 打赏
  • 举报
回复
GX
做鸡真好吃 2006-03-18
  • 打赏
  • 举报
回复
Mark~
tanghuan 2006-03-16
  • 打赏
  • 举报
回复
synchronized 加在方法前修饰 表示是对象this的同步,如果这个方法是静态的,表示在这个类的Class对象,即在这个类上是同步的。
JaredJared 2006-03-14
  • 打赏
  • 举报
回复
在while死循环里面没有一直获得对象锁,执行完一次循环后就释放锁了,然后又获得对象锁。
你把while的死循环放到increate()和myPrintln()里面就可以看到你要的效果了。
做鸡真好吃 2006-03-14
  • 打赏
  • 举报
回复
???????
treeroot 2006-03-14
  • 打赏
  • 举报
回复
gx
zhaoke5421 2006-03-14
  • 打赏
  • 举报
回复
3q
zhaoke5421 2006-03-14
  • 打赏
  • 举报
回复
多谢 终于明白了

62,624

社区成员

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

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