k****r 发帖数: 807 | 1 不是很懂多线程,请教我这样的设计可以满足面试官对于deposit和withdraw的提问吗?
哪里可以找到代码学习学习,谢谢。
class bank2 {
private double balance;
private int acountNum;
private Object lock = new Object();
public bank2(int a, double b) {
acountNum = a;
balance = b;
}
public boolean withdraw(double w) {
synchronized(lock) {
if (balance < w) return false;
balance -= w;
return true;
}
}
public boolean deposit(double d) {
synchronized(lock) {
balance += d;
return true;
}
}
} |
k****r 发帖数: 807 | |
g*****g 发帖数: 34805 | 3 Use AtomicDouble and thank me later.
【在 k****r 的大作中提到】 : 大牛们都不屑回答这种烂大街的题了吗
|
z*******o 发帖数: 4773 | 4 Use BigDecimal and thank me later. |
k****r 发帖数: 807 | 5 大牛们有没有现成的样板可以学习下啊,我这二把刀真的怕写的不好。thank you two
now! |
k******a 发帖数: 44 | 6 求人不如放狗
java concurrency bank example
https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q
=java%20concurrency%20bank%20example
看面试官对于withdraw和deposit的具体要求。
另外,注意细节。
1. balance -= d;
2. 输入的合法性检查 |
k****r 发帖数: 807 | 7 也是搜了几个,没找到写的好的。
谢谢, 一个bug:P 已修正。
#q
【在 k******a 的大作中提到】 : 求人不如放狗 : java concurrency bank example : https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q : =java%20concurrency%20bank%20example : 看面试官对于withdraw和deposit的具体要求。 : 另外,注意细节。 : 1. balance -= d; : 2. 输入的合法性检查
|
s**x 发帖数: 7506 | |
j**********3 发帖数: 3211 | |
z*******3 发帖数: 13709 | 10 java多线程有的是各种乱七八糟的轮子帮忙搞多线程
你不需要手写多线程的并发控制
ejb, spring, akka, vert.x随便一个都可以控制住
退一步说,如果你真要自己处理多线程并发处理
用java.util.concurrency这个libs里面的类
自己看,古德霸说的atomic double这些都在那里面
估计不会让你写,而是直接问你比如hashmap vs hastable这种问题
thread safe诸如此类,如果你java基础语法没有问题的话
花点时间在其他东西上,别什么都自己折腾,去看看别人的轮子是怎么跑的
领悟精神,理解原理
对了,如果是银行的话,多半有db,理解transaction, jdbc, hibernate这些东西
transaction也可以控制住,而且多数时候,那些老代码都是transaction在搞并发处理
oracle就靠这个插管吸血了
吗?
【在 k****r 的大作中提到】 : 不是很懂多线程,请教我这样的设计可以满足面试官对于deposit和withdraw的提问吗? : 哪里可以找到代码学习学习,谢谢。 : class bank2 { : private double balance; : private int acountNum; : private Object lock = new Object(); : public bank2(int a, double b) { : acountNum = a; : balance = b; : }
|