synchronized 不工作!

QaedaS 2003-12-10 11:17:22
public class df extends Thread {
private int i=0;

public static void main(String[] args){
df f1=new df();
f1.start();
df f2 = new df();
f2.start();}

public void run(){prin();}

public synchronized/*就是它了,不工作*/ void prin(){
for(int j=0;j<50;j++){
i++;
System.out.println(" "+i);
}}}
这段代码为什么不能在控制台上输出1,2,...49,1,2,...49?
而是两个线程同时工作?切换着工作?1,2,3,4,1,2,3,4,5,6,7,8,9,5,6,7,8......?
...全文
5 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zkhj 2003-12-10
将变量j定义到函数外面就可以了。
回复
nicolas2 2003-12-10
synchronized方法锁住的只是实例啊,你的例子有两个实例哦df f1=new df();
f1.start();
df f2 = new df();
f2.start();}
,所以跟没有用synchronized一样啊,synchronized(df.class)是锁住一个类型啊,一个虚拟机中只有一个df的class啊,所以就能锁住啊。
回复
xiaozuidazhi 2003-12-10
synchronized(df.class)是什么意思?把synchronized放在这里和放在void prin()前面有什么区别吗?
回复
alienbat 2003-12-10
synchronized就是这样工作的。
回复
bluesmile979 2003-12-10
public void prin(){
synchronized(df.class){
for(int j=0;j<50;j++){
i++;
System.out.println(" "+i);
}}

这样就能满足你的要求了
回复
QaedaS 2003-12-10
nicolas2,这个问题分太少了,不过还是要谢谢你。
回复
QaedaS 2003-12-10
放分!咱放分就是快,以后恐怕只有多申请号了!
回复
QaedaS 2003-12-10
zkhj(zkhj),我明白你的意思。要是定义成公有变量就没意思了
回复
xiaozuidazhi 2003-12-10
zkhj(zkhj)

你的办法不行,没试过就敢乱说?
回复
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2003-12-10 11:17
社区公告
暂无公告