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......?
...全文
40 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)

你的办法不行,没试过就敢乱说?

62,634

社区成员

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

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