java 线程同步!银行取钱问题!

packagecom.lovo;importjava.util.Scanner;publicclassTsynchronizedimplementsRunnable{Mo... package com.lovo;

import java.util.Scanner;

public class Tsynchronized implements Runnable{
Money mo = new Money();

public static void main(String[] args) {
Tsynchronized ts = new Tsynchronized();
Thread th = new Thread(ts);
Thread th1 = new Thread(ts);
th.start();
th1.start();
}

public void run(){
mo.get();
}
}

class Money{

public void get (){
synchronized (this) {
int i = 5000;
int sum = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入取款金额");
int a = sc.nextInt();
sum = i-a;
System.out.println("余额为"+ sum);
}
}
}

两个线程访问一个资源,代码在上面!我运行时 money不能更新!
展开
 我来答
百度网友3d7451c
2010-08-28 · 超过17用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:43.4万
展开全部
int i = 5000;
int sum = 0;

你把钱数 i 放在方法里这是一个局部变量
每次调用 都初始化下
方法结束 就没有了

建议你把i放到类的属性里。
这样写
class Money{
volatile int i = 5000;
public void get (){
synchronized (this) {

int sum = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入取款金额");
int a = sc.nextInt();
sum = i-a;
System.out.println("余额为"+ sum);
}
}
}
希望我说的清楚
匿名用户
2017-08-30
展开全部

参考的线程案例

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jayby00
2017-08-28 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:50%
帮助的人:51.7万
展开全部
static Money mo = new Money();
将临界区的东西设置位静态,此为方法一;
synchronized (mo) {}
将锁变为锁住mo对象.此为方法2
另:你那个synchronized (this)本身是无效的啊...
二〇一七年八月二十八日 21:28:24
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xjf5562
2017-08-21 · TA获得超过1190个赞
知道小有建树答主
回答量:896
采纳率:75%
帮助的人:760万
展开全部
把Money稍作更改即可:
class Money{
int sum = 5000;
public void get (){
synchronized (this) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入取款金额");
int a = sc.nextInt();
sum -= a;
System.out.println("余额为"+ sum);
}
}
你原先把余额设在方法内部,每次运行这个方法,钱数都会初始化为5000,这是造成以上结果的原因。把钱数和余额合并为一个变量,并放在方法外,作为类变量,可以解决这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fylsh
2010-08-28 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1071万
展开全部
应该把int i = 5000;
作为Money的属性,在class Money中怎么属性:int balance=5000;
对于线程设计上是正确的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zn123717885
2017-08-31 · TA获得超过1033个赞
知道小有建树答主
回答量:771
采纳率:52%
帮助的人:124万
展开全部
int i 是局部变量导致的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式