不用同步不行吧,是不是deposit 本身已经是同步的了
解决方案 »
- 在Netbeans 中导入了TableExample.jar这个文件 但是要怎么调用啊
- 现在学习j2se。谁有JDKTM 6 Documentation中文版
- Java中生成Unixtime时间
- 正则表达式中非捕获组(?:X)和(?>X)表示什么意思啊,最好有个例子????
- 关于用htmlparser提取页面文字的问题
- Java.lang.StackOverflowError的问题
- 只能输入4位半角数字的JTextField中输入全角字符时会消去已有的数字。
- 急!!!如何在jdbc中用executeUpdate??
- 请教关于weblogic5.1的环境变量设置问题。急!急!急!
- jtree刷新后节点名字出现省略号
- 问一个傻傻的问题
- 急问各位JAVA高手
数据库操作没有做同步吗-锁?
中间件上没有同步吗?
在JAVA Class上同步有意义吗,可对帐户操作的系统不止JAVA吧?
银行帐号操作一般在单帐户读的时候就已经上锁了?
如果是要以上一个用户的存钱作为下一个用户的初始化现金,
那我个人觉得这个程序有一点问题.这是改后的程序.只是多加了几个线程.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作的测试
//如果有错恳请指教.
很有道理!