---------------------- <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>、期待与您交流! ----------------------