您的位置:首页 > 职场人生

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

2014-07-21 14:52 417 查看
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<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>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐