黑马程序员_多线程之同步问题的前期,以及安全问题的发现和解决

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

package demo;
/*
同步的前提:
1、必须要有多个(2个或2个以上)的线程
2、必须多个线程使用同一个锁
       必须保证同步中只有一个线程运行
好处:解决了多线程的安全问题
弊端:多个线程需要判断锁,消耗资源,降低效率。
 */
/*
 需求:银行有一个金库
      有两个人分别存300元,每次存100,存3次(解决安全问题后代码如下)
目的:该线程是否有安全问题,如果有如何解决?
 如何找问题?
1、明确哪些代码是多线程代码
2、明确共享数据
3、明确多线程运行代码中那些语句是操作共享数据的。
 */
class Bank
{
 private int sum;//共享数据
 Object obj = new Object();
 public void add(int n)
 {
  synchronized(obj)//synchronized内部的代码是操作共享数据的
  {
   sum=sum+n;
   try{Thread.sleep(10);}catch(Exception e){}
   System.out.println("sum="+sum);
  }
 }
}
class Cus implements Runnable
{
 private Bank b=new Bank();
 public void run()//run中的代码是多线程运行代码
 {
  for(int x=0;x<3;x++)
  {
   b.add(100);
  }
 }
}
public class BankDemo {

 public static void main(String[] args)
 {
  Cus c = new Cus();
  Thread t1 = new Thread(c);
  Thread t2 = new Thread(c);
  t1.start();
  t2.start();
 }

}

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值