不用同步不行吧,是不是deposit 本身已经是同步的了

解决方案 »

  1.   

    存款操作用同步吗?
    数据库操作没有做同步吗-锁?
    中间件上没有同步吗?
    在JAVA Class上同步有意义吗,可对帐户操作的系统不止JAVA吧?
    银行帐号操作一般在单帐户读的时候就已经上锁了?
      

  2.   

    首先这个程序要完成什么样的操作呢?
    如果是要以上一个用户的存钱作为下一个用户的初始化现金,
    那我个人觉得这个程序有一点问题.这是改后的程序.只是多加了几个线程.import java.io.*;class DepositThread extends Thread { Accout accout;
     int depositAccout;
     String message; DepositThread(Accout a1,int de,String s){
      this.accout=a1;
      this.depositAccout=de;
      message=s;
     } public void run(){
      accout.deposit(depositAccout,message);
     }
    }class Accout{
     PrintWriter out;
     
     Accout(PrintWriter out){
      this.out=out;
     } void deposit(int depositAccout,String message){
      int balance;
      out.println(message+"--deposit--"+depositAccout);
      out.println(message+"--getting  balance...");
      balance=getBalance();
      out.println(message+"--get balance is-- "+balance);
      balance+=depositAccout;
      out.println(message+"--setting balance...");
      setBalance(balance);
      out.println(message+"--new balance set to--"+getBalance());
     } int getBalance(){
      return Deposit.balance;
     }
     
     void  setBalance(int balance){
       Deposit.balance=balance;
     }
    }
    public class Deposit{
     static int balance=0; public static void main(String args[]){
     PrintWriter out=new PrintWriter(System.out,true);
     Accout accout=new Accout(out);
     DepositThread d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15; d1=new DepositThread(accout,1,"a");
     d2=new DepositThread(accout,1,"b");
     d3=new DepositThread(accout,1,"c");
     d4=new DepositThread(accout,1,"d");
     d5=new DepositThread(accout,1,"e");
     d6=new DepositThread(accout,1,"f");
     d7=new DepositThread(accout,1,"g");
     d8=new DepositThread(accout,1,"h");
     d9=new DepositThread(accout,1,"i");
     d10=new DepositThread(accout,1,"j");
     d11=new DepositThread(accout,1,"k");
     d12=new DepositThread(accout,1,"l");
     d13=new DepositThread(accout,1,"m");
     d14=new DepositThread(accout,1,"n");
     d15=new DepositThread(accout,1,"o"); d1.start();
     d2.start();
     d3.start();
     d4.start();
     d5.start();
     d6.start();
     d7.start();
     d8.start();
     d9.start();
     d10.start();
     d11.start();
     d12.start();
     d13.start();
     d14.start();
     d15.start(); try {
        d1.join();
        d2.join();
        d3.join();
        d4.join();
        d5.join();
        d6.join();
        d7.join();
        d8.join();
        d9.join();
        d10.join();
        d11.join();
        d12.join();
        d13.join();
        d14.join();
        d15.join();
      }
      catch(Exception e){
      }
     }
    }
    //编译以后运行第1次这是输出结果:
    a--deposit--1
    a--getting  balance...
    a--get balance is-- 0
    a--setting balance...
    a--new balance set to--1
    b--deposit--1
    b--getting  balance...
    b--get balance is-- 1
    b--setting balance...
    b--new balance set to--2
    c--deposit--1
    c--getting  balance...
    c--get balance is-- 2
    c--setting balance...
    c--new balance set to--3
    d--deposit--1
    d--getting  balance...
    d--get balance is-- 3
    d--setting balance...
    d--new balance set to--4
    e--deposit--1
    e--getting  balance...
    e--get balance is-- 4
    f--deposit--1
    g--deposit--1
    h--deposit--1
    i--deposit--1
    j--deposit--1
    k--deposit--1
    l--deposit--1
    m--deposit--1
    n--deposit--1
    o--deposit--1
    e--setting balance...
    f--getting  balance...
    g--getting  balance...
    h--getting  balance...
    i--getting  balance...
    j--getting  balance...
    k--getting  balance...
    l--getting  balance...
    m--getting  balance...
    n--getting  balance...
    o--getting  balance...
    e--new balance set to--5 //问题好像从这开始了.后面的几个用户不是以上一个用户
                             //的存款作为自己的初始现金.而都是以e的存款作为自己的
                             //初始现金了.
    f--get balance is-- 5
    g--get balance is-- 5
    h--get balance is-- 5
    i--get balance is-- 5
    j--get balance is-- 5
    k--get balance is-- 5
    l--get balance is-- 5
    m--get balance is-- 5
    n--get balance is-- 5
    o--get balance is-- 5
    f--setting balance...
    g--setting balance...
    h--setting balance...
    i--setting balance...
    j--setting balance...
    k--setting balance...
    l--setting balance...
    m--setting balance...
    n--setting balance...
    o--setting balance...
    f--new balance set to--6
    g--new balance set to--6
    h--new balance set to--6
    i--new balance set to--6
    j--new balance set to--6
    k--new balance set to--6
    l--new balance set to--6
    m--new balance set to--6
    n--new balance set to--6
    o--new balance set to--6
    Exit code: 0
    No Errors//同样的是上面的同一个程序,不compile运行第2次的结果
    a--deposit--1
    a--getting  balance...
    a--get balance is-- 0
    a--setting balance...
    a--new balance set to--1
    b--deposit--1
    b--getting  balance...
    b--get balance is-- 1
    b--setting balance...
    b--new balance set to--2
    d--deposit--1
    d--getting  balance...
    d--get balance is-- 2
    d--setting balance...
    d--new balance set to--3
    e--deposit--1
    e--getting  balance...
    e--get balance is-- 3
    e--setting balance...
    e--new balance set to--4
    f--deposit--1
    f--getting  balance...
    f--get balance is-- 4
    f--setting balance...
    f--new balance set to--5
    g--deposit--1
    g--getting  balance...
    g--get balance is-- 5
    g--setting balance...
    g--new balance set to--6
    h--deposit--1
    h--getting  balance...
    h--get balance is-- 6
    h--setting balance...
    h--new balance set to--7
    i--deposit--1
    i--getting  balance...
    i--get balance is-- 7
    i--setting balance...
    i--new balance set to--8
    j--deposit--1
    j--getting  balance...
    j--get balance is-- 8
    j--setting balance...
    j--new balance set to--9
    k--deposit--1
    k--getting  balance...
    k--get balance is-- 9
    k--setting balance...
    k--new balance set to--10
    m--deposit--1
    m--getting  balance...
    m--get balance is-- 10
    m--setting balance...
    m--new balance set to--11
    o--deposit--1
    o--getting  balance...
    o--get balance is-- 11
    o--setting balance...
    o--new balance set to--12
    c--deposit--1
    c--getting  balance...
    c--get balance is-- 12
    c--setting balance...
    c--new balance set to--13
    n--deposit--1
    n--getting  balance...
    n--get balance is-- 13
    n--setting balance...
    n--new balance set to--14
    l--deposit--1
    l--getting  balance...
    l--get balance is-- 14
    l--setting balance...
    l--new balance set to--15
    Exit code: 0
    No Errors//以后的运行结果同第2次的过程相同加上synchronized关键字后:
    a--deposit--1
    a--getting  balance...
    a--get balance is-- 0
    a--setting balance...
    a--new balance set to--1
    b--deposit--1
    b--getting  balance...
    b--get balance is-- 1
    b--setting balance...
    b--new balance set to--2
    c--deposit--1
    c--getting  balance...
    c--get balance is-- 2
    c--setting balance...
    c--new balance set to--3
    d--deposit--1
    d--getting  balance...
    d--get balance is-- 3
    d--setting balance...
    d--new balance set to--4
    e--deposit--1
    e--getting  balance...
    e--get balance is-- 4
    e--setting balance...
    e--new balance set to--5
    f--deposit--1
    f--getting  balance...
    f--get balance is-- 5
    f--setting balance...
    f--new balance set to--6
    g--deposit--1
    g--getting  balance...
    g--get balance is-- 6
    g--setting balance...
    g--new balance set to--7
    h--deposit--1
    h--getting  balance...
    h--get balance is-- 7
    h--setting balance...
    h--new balance set to--8
    i--deposit--1
    i--getting  balance...
    i--get balance is-- 8
    i--setting balance...
    i--new balance set to--9
    j--deposit--1
    j--getting  balance...
    j--get balance is-- 9
    j--setting balance...
    j--new balance set to--10
    l--deposit--1
    l--getting  balance...
    l--get balance is-- 10
    l--setting balance...
    l--new balance set to--11
    n--deposit--1
    n--getting  balance...
    n--get balance is-- 11
    n--setting balance...
    n--new balance set to--12
    o--deposit--1
    o--getting  balance...
    o--get balance is-- 12
    o--setting balance...
    o--new balance set to--13
    k--deposit--1
    k--getting  balance...
    k--get balance is-- 13
    k--setting balance...
    k--new balance set to--14
    m--deposit--1
    m--getting  balance...
    m--get balance is-- 14
    m--setting balance...
    m--new balance set to--15
    Exit code: 0
    No Errors
    //不论第己次运行都没有错
    //所以还是用同步的好.可以保证不会出错.
    //这是我的个人意见,在win98下,用freejava3.0,jdk1.3作的测试
    //如果有错恳请指教.
      

  3.   

    bootcool(bootcool):
       很有道理!