关于JAVA同步处理的问题...

napper_zhao 2012-07-28 02:05:44
就是要求对存款和取款进行同步,如果分别给两个函数加上synchronized,这样在运行时算是实现了不能同时进行存款取款操作,还是不能同时进行两个存款或者取款操作...这样分别加上synchronized,里面的account算是共享变量吗,是否算是在不同线程间加锁?

public synchronized void deposit(double a){
account += a;
}
public synchronized void withdraw(double a ){
account -= a;
}

如果是这样呢?
public synchronized void deposit(Boolean k, double a){
if(k==false)
{
this.setKey(true);
account += a;

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

this.setKey(false);
}
else
{System.out.println(this.getId()+"存款等待key");}
}
public synchronized void withdraw(Boolean k, double a ){
if(k==false)
{
this.setKey(true);
account -= a;

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

this.setKey(false);
}
else
{System.out.println(this.getId()+"取款等待key");}
}

谢谢
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
napper_zhao 2012-07-29
  • 打赏
  • 举报
回复
嗯,收到,谢谢啦...

[Quote=引用 4 楼 的回复:]

建议楼主把代码全部贴出来。

1、多线程
2、共享变量
3、对于共享变量进行增删操作
以上三种符合的时候需要synchronize
对于共享变量
多个线程共享同一个对象的变量。

比如我这有个:
Java code

public static void main(String[] args) {
final String r1 = "resource1";……
[/Quote]
达达KZT 2012-07-28
  • 打赏
  • 举报
回复
建议楼主把代码全部贴出来。

1、多线程
2、共享变量
3、对于共享变量进行增删操作
以上三种符合的时候需要synchronize
对于共享变量
多个线程共享同一个对象的变量。

比如我这有个:

public static void main(String[] args) {
final String r1 = "resource1";
final String r2 = "resource2";

Thread t1 = new Thread(){
@Override
public void run() {
synchronized (r1) {
System.out.println("是"+Thread.currentThread().getName()+"拿到了"+r1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

synchronized (r2) {

}
}
}
};

Thread t2 = new Thread(){
@Override
public void run() {
synchronized (r2) {
System.out.println("是"+Thread.currentThread().getName()+"拿到了"+r2);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

synchronized (r1) {

}
}
}
};

t1.start();
t2.start();
}


这时候是两个线程共享了一个变量。
这时候是死锁。
不知道对楼主有没有帮助。
napper_zhao 2012-07-28
  • 打赏
  • 举报
回复
那按照下面那种写法呢?
[Quote=引用 2 楼 的回复:]

应该不算是共享变量。 你可以测试一下。
[/Quote]
hemdu 2012-07-28
  • 打赏
  • 举报
回复
应该不算是共享变量。 你可以测试一下。
napper_zhao 2012-07-28
  • 打赏
  • 举报
回复
没有人啊...

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧