Java语言程序设计----- 多线程机制

Java语言程序设计–实验八 多线程机制

1.实验内容

(1)编写三个线程分别显示各自的运行时间,第一个线程每隔1秒钟运行一次,第二个线程每隔5秒钟运行一次,第三个线程每隔10秒钟运行一次。
(2)编写两个线程,一个线程向数组中存数据,一个线程向数组中取数据。练习如何实现线程的同步。
(3)银行账户的存/取款线程设计
设计3个类:账户类Account、存款线程类SaveLock、取款线程类FetchLock。账户类Accout记录储户名和金额,提供存款方法put()和取款方法get()。SaveLock和FetchLock类分别提供对指定账户的存/取款操作,在SaveLock和FetchLock类的run()方法账户声明临界区,锁定当前操作的账户对象,形成对同一个账户对象的互斥使用。

1.class test0{
	 public static void main(String []args){
	   owwa tr1=new owwa();
	   tr1.set(1000);
	   tr1.setName("第一个线程");

	   owwa tr2=new owwa();
	   tr2.set(5000);
	   tr2.setName("第二个线程");
	  
	   owwa tr3=new owwa();
	   tr3.set(10000);
	   tr3.setName("第三个线程"); 
	   tr1.start();
	   tr2.start();
	   tr3.start();
	  // while(true)
	   System.out.print(Thread.currentThread().getName()+"\n");
	 }
	}
class owwa extends Thread{
	private int t;
	private int i=0;
	public void set(int t) {
		this.t=t;
	}
	public void run(){
		while(true) {
		try {

			Thread.sleep(t);

		} catch (Exception e) {

			e.printStackTrace();

		}
		
	  System.out.print(getName()+"运行时间为:"+(t+i)/1000+"秒\n");
	  i=t+i;
	}
	}
	}
2.class test0 {
public static void main(S


tring[] args) {
int [] a= {1,2,3,4,5,6,7,8,9,10};
t1 ta = new t1();
t2 tb = new t2();
ta.setName("线程1取数据");
tb.setName("线程2存数据");
t1.out(a);
t2.out(a);

ta.start();
tb.start();
a=tb.get();
}


}

class t1 extends Thread { 


	private static int[] a;
	 static void out(int[] b) {
		 
		 a=b;
	 }

	
	public void run() {
	    while(true)	
	    	{int j=(int) (Math.random()*10);
		System.out.println(getName()+"取出数字"+a[j]+"\n");}
		
	}

}

class t2 extends Thread {

 int i=0;
	private static int[] a;
	 static void out(int[] b) {
		 
		 a=b;
	 }

	
	public void run() {
		for (;i<a.length;i++) {
			int j=(int) (Math.random()*100);
			a[i]=j;
			System.out.println(getName()+"存入数字"+j+"\n");
			if(i==a.length-1)
				i=0;
		}
	

	}
	public int[] get() {
		return a;
	}
	

}


3.public class account{
	private static double save=100;
	   private static String name="webv";
	private static double j;
	public static void main(String []args) {

		for(int i = 0;i<5;i++) {
         SaveLock putsave=new SaveLock();
		FetchLock outsave=new FetchLock();
		putsave.setName("存钱线程");
		outsave.setName("取钱线程");
		putsave.get(name, save);
		outsave.get(name, save);
		
		putsave.start();
		j=putsave.put1();
		save=save+j;
		System.out.println("账户:"+name+"存入"+j+"元,余额为"+save+"元\n");

		outsave.start();
		j=outsave.put1();
		if(save>=j) {
		save=save-j;
		System.out.println("账户:"+name+"取出"+j+"元;还剩:"+save+"\n");
		}
		else {
			System.out.println("余额不足\n");
		     }
		}
		
	}
	  public void getmy(double my){
		  save=save+my;
	  }
}

class SaveLock extends Thread{
	double j=(double) (Math.random()*200);
	private String name;
	private double save;
	public void get(String name,double save) {
		this.name=name;
		this.save=save;
	}
	public void run() {
		
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		save=save+j;
		//System.out.println(getName()+"账户:"+name+"存入"+j+"元,余额为"+save+"元\n");
		
	   
		

	}
	public double put1() {
		
		
		
		return j;
		
	}

}

class FetchLock extends Thread{
	account a;
	double j=(double) (Math.random()*10);
	private String name;
	private double save;
	public void get(String name,double save) {
		this.name=name;
		this.save=save;
	}
	public void run() {
	
		
		for(int i = 0;i<5;i++) {
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		if(save>=j) 
		{

		save=(save-j);
		//System.out.println(getName()+"账户:"+name+"取出"+j+"元;还剩:"+save+"\n");
		            }
		else {
			//System.out.println("余额不足\n");
		     }
		}
	}
		 
	
	public double put1() {
		
		
		
		return j;
		
	}

}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值