java 多线程堆栈问题_JavaWeb关于高并发,线程,同步化,堆与栈的各类问题

JavaWeb关于高并发,线程,同步化,堆与栈的各类问题

Synchronized同步化的四种方法!

对于同步化,有几点需要声明以便理解:类是被声明的,对象是按照类的具体声明来决定怎样被创建.每个对象都是拥有一把锁的!在多线程对同一对象进行操作的情况下,这把锁的获取权,将会被各个线程锁争夺,唯有获取了该对象的锁,才能对该对象进行操作!

假定现在有一个类:public class Account 代表账户

声明如下:

public class Account {

private int balance;      //代表余额

private String name;          //用户的姓名

public int deposit (int count){   //入账,存入金额

this.balance += count;

return this.balance;

}

public int chargeoff(int count){  //出账,取出金额

this.balance -= count;

return this.balance;

}

//setter and getter

public int getBalance() {

return balance;

}

public void setBalance(int balance) {

this.balance = balance;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

对象(Object)的同步化:

例如:我们在其他的类中填写代码的时候要使用到Account这个类,来操作用户的账户.

假设这个类是public class Operation

public class Operation {

public static void operate(count1, count2){

Account a1 = new Account();

Account a2 = new Account();

synchronized(a1){

a1.deposit(count1);

a1.chargeoff(count2);

}

a2.deposit(count1);

a2.chargeoff(count2);

}

}

如果想要使用Operation这个类,执行对两个账户a1,a2的修改,那么锁住对象变得很关键了.

在实际环境中,若果对a1或者a2两个变量在一小段时间内,同时多线程操作,那么thread-1和thread-2获取的balance很可能是一样的,这样一来,在thread-1还没有操作完毕之后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值