不用同步也可实现多线程银行存款操作???? 不用同步不行吧,是不是deposit 本身已经是同步的了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 存款操作用同步吗?数据库操作没有做同步吗-锁?中间件上没有同步吗?在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--1a--getting balance...a--get balance is-- 0a--setting balance...a--new balance set to--1b--deposit--1b--getting balance...b--get balance is-- 1b--setting balance...b--new balance set to--2c--deposit--1c--getting balance...c--get balance is-- 2c--setting balance...c--new balance set to--3d--deposit--1d--getting balance...d--get balance is-- 3d--setting balance...d--new balance set to--4e--deposit--1e--getting balance...e--get balance is-- 4f--deposit--1g--deposit--1h--deposit--1i--deposit--1j--deposit--1k--deposit--1l--deposit--1m--deposit--1n--deposit--1o--deposit--1e--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-- 5g--get balance is-- 5h--get balance is-- 5i--get balance is-- 5j--get balance is-- 5k--get balance is-- 5l--get balance is-- 5m--get balance is-- 5n--get balance is-- 5o--get balance is-- 5f--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--6g--new balance set to--6h--new balance set to--6i--new balance set to--6j--new balance set to--6k--new balance set to--6l--new balance set to--6m--new balance set to--6n--new balance set to--6o--new balance set to--6Exit code: 0No Errors//同样的是上面的同一个程序,不compile运行第2次的结果a--deposit--1a--getting balance...a--get balance is-- 0a--setting balance...a--new balance set to--1b--deposit--1b--getting balance...b--get balance is-- 1b--setting balance...b--new balance set to--2d--deposit--1d--getting balance...d--get balance is-- 2d--setting balance...d--new balance set to--3e--deposit--1e--getting balance...e--get balance is-- 3e--setting balance...e--new balance set to--4f--deposit--1f--getting balance...f--get balance is-- 4f--setting balance...f--new balance set to--5g--deposit--1g--getting balance...g--get balance is-- 5g--setting balance...g--new balance set to--6h--deposit--1h--getting balance...h--get balance is-- 6h--setting balance...h--new balance set to--7i--deposit--1i--getting balance...i--get balance is-- 7i--setting balance...i--new balance set to--8j--deposit--1j--getting balance...j--get balance is-- 8j--setting balance...j--new balance set to--9k--deposit--1k--getting balance...k--get balance is-- 9k--setting balance...k--new balance set to--10m--deposit--1m--getting balance...m--get balance is-- 10m--setting balance...m--new balance set to--11o--deposit--1o--getting balance...o--get balance is-- 11o--setting balance...o--new balance set to--12c--deposit--1c--getting balance...c--get balance is-- 12c--setting balance...c--new balance set to--13n--deposit--1n--getting balance...n--get balance is-- 13n--setting balance...n--new balance set to--14l--deposit--1l--getting balance...l--get balance is-- 14l--setting balance...l--new balance set to--15Exit code: 0No Errors//以后的运行结果同第2次的过程相同加上synchronized关键字后:a--deposit--1a--getting balance...a--get balance is-- 0a--setting balance...a--new balance set to--1b--deposit--1b--getting balance...b--get balance is-- 1b--setting balance...b--new balance set to--2c--deposit--1c--getting balance...c--get balance is-- 2c--setting balance...c--new balance set to--3d--deposit--1d--getting balance...d--get balance is-- 3d--setting balance...d--new balance set to--4e--deposit--1e--getting balance...e--get balance is-- 4e--setting balance...e--new balance set to--5f--deposit--1f--getting balance...f--get balance is-- 5f--setting balance...f--new balance set to--6g--deposit--1g--getting balance...g--get balance is-- 6g--setting balance...g--new balance set to--7h--deposit--1h--getting balance...h--get balance is-- 7h--setting balance...h--new balance set to--8i--deposit--1i--getting balance...i--get balance is-- 8i--setting balance...i--new balance set to--9j--deposit--1j--getting balance...j--get balance is-- 9j--setting balance...j--new balance set to--10l--deposit--1l--getting balance...l--get balance is-- 10l--setting balance...l--new balance set to--11n--deposit--1n--getting balance...n--get balance is-- 11n--setting balance...n--new balance set to--12o--deposit--1o--getting balance...o--get balance is-- 12o--setting balance...o--new balance set to--13k--deposit--1k--getting balance...k--get balance is-- 13k--setting balance...k--new balance set to--14m--deposit--1m--getting balance...m--get balance is-- 14m--setting balance...m--new balance set to--15Exit code: 0No Errors//不论第己次运行都没有错//所以还是用同步的好.可以保证不会出错.//这是我的个人意见,在win98下,用freejava3.0,jdk1.3作的测试//如果有错恳请指教. bootcool(bootcool): 很有道理! 如何用java实现,1.白色的提示结账面,2.跟如何打印出来 一个排序问题 如何才能读取文本内容而不影响写入 Java怎样从TXT中一个一个读取字符串? 今天我碰到的一些面试题,列给大家,有兴趣大家可以做一下 急:批处理文件问题 一菜鸟问题,搞定马上有分 有证书才可访问,无证书不可访问。 如何实现???现在等。 请问怎么用java定制平面式的反转按纽,就象IE浏览器上的“收藏”按纽。 InputStream的有关问题! 问一个傻傻的问题 急问各位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作的测试
//如果有错恳请指教.
很有道理!