第四周作业-多线程编程

实验内容

    大家可以选择做 1,或选择做2,全部做更鼓励。

1:线程同步程序。P174-176 例8-4,把书籍代码敲到Java文件中,运行结果,理解线程同步的原因与方法、创建新线程的方法等。

2:多线程的应用。我们从网络下载数据,经常会使用多线程,如迅雷下载等,那么怎么实现的呢?请查看java下载网页并读取内容,以及本博主的其他相关内容、网络上的内容,初步了解利用多线程下载网页数据。


1、【例8-4】源程序名称AccountTest1.java,实现线程同步的例子

class BankAccount{									//定义银行账户类BankAccount
	private static int amount = 2000;				//定义余额最初为2000
	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(){								//定义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);
	}
}

运行,结果


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