......
synchronized(user){
int loginNum = Integer.parseInt(Main_Client_Dia.jtf2.getText().trim());
Main_Client_Dia.jtf2.setText("");
loginNum++;
Main_Client_Dia.jtf2.setText(loginNum+"");
}
......
几百个线程同时访问上面的代码
为什么 无法 实现同步呢
Main_Client_Dia.jtf2.setText的值时有时会不是想要的结果, 

解决方案 »

  1.   

    没体验过上百个线程访问!!我觉得应该是对象user不能实现!!
      

  2.   

    你把括号和里面的user去掉试试
      

  3.   

    首先你要确定你每一个线程中的user是同一个对象.如果不是同一个对象也就没有意义了!
      

  4.   

    每个user对象是通过构造函数传进来的,每个线程的user对象是不同的
      

  5.   

    而且, int loginNum = Integer.parseInt(Main_Client_Dia.jtf2.getText().trim());
    经常出错,提示说Main_Client_Dia.jtf2.getText().trim()得到的值为"";
      

  6.   


    想办法,让每个线程对同一个user对象进行处理
      

  7.   


    说明你的jtf2中值不对    一、使其值非空,二、使其能够转换为int
      

  8.   

    最重要的是Main_Client_Dia.jtf2.setText(loginNum+"");
    更新不及时,有时候会与下一个线程的值连在一起显示咯 (⊙o⊙)
      

  9.   

    每个线程的USER对象不同?那怎么实现同步啊,你现在用的是synchronized(user),每个线程要执行之前都要获得user对象的同步锁。
    你是不是想多个用户同时对JFram中的某个JTextField进行修改而不发生错误?那你同步对象锁换成Jfram对象就可以了synchronized(jfram),每个线程中持有相同的jframe对象就可以实现同步了。
      

  10.   


    那 意思是将jframe对象一直向下传咯,因为有好几处都需要同步呢
      

  11.   

    你的线程类都持有同一个jframe对象的引用就可以了
      

  12.   

    可以考虑用
    synchronized(user.getClass()){
    ....
    }