實現線程同步的例子



class BankAccount {
	private static int amount=20000;
	public void despoit(int m)
	{

		amount=amount+m;
		System.out.println("小明存入["+m+"元]");
	}
	public void withdraw(int m)
	{
		amount=amount-m;
		System.out.println("***張新取走["+m+"元]");
		if(amount<0)
			System.out.println("***餘額不足! ***");
	}
	public int balance()
	{
		return amount;
	}
}
class Customer extends Thread
{
	String name;
	BankAccount bs;
	public Customer(BankAccount b,String s)
	{
		name=s;
		bs=b;
	}
	public synchronized static void cus(String name,BankAccount bs)
	{
		if(name.equals("小明"))
		{
			try
		{
		for(int i=0;i<6;i++)
		{
			Thread.currentThread().sleep((int)(Math.random()*300));
			bs.despoit(1000);
		}
	    }
	catch(InterruptedException e)
	{}
}
else
{
	try
	{
		for(int i=0;i<6;i++)
		{
			Thread.currentThread().sleep((int)(Math.random()*300));
			bs.withdraw(1000);
		}
	}
	catch(InterruptedException e)
	{}
}
}
public void run()
{
	cus(name,bs);
}
}
public class AccountTest1
{
	public static void main(String args[])throws InterruptedException
	{
		BankAccount bs=new BankAccount();
		Customer customer1=new Customer(bs,"小明");
		Customer customer2=new Customer(bs,"張新");
		Thread t1=new Thread(customer1);
		Thread t2=new Thread(customer2);
		t1.start();
		t2.start();
		Thread.currentThread().sleep(500);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章