线程池的案例模拟

案例1:

第一个线程输出1,2,3,4,5

 第二个线程输出6,7,8,9,10

 第三个线程输出11,12,13,14,15

 第一个线程输出16,17,18,19,20

 第二个线程输出..........

 第三个线程输出........

 直到输入75停止。

方法一:

package com.hyxy.se.day13;

/*作业1:
   第一个线程0输出1,2,3,4,5第二个线程1输出6,7,8,9,10 第三个线程2输出11,12,13,14,15
   第一个线程输出16,17,18,19,20第二个线程输出..........第三个线程输出........直到输入75停止
线程0:12345...16 17 18 19 20  num%15/5
*/
public class Homework01 {
	public static void main(String[] args) {
		MyThread t1=new MyThread(0);
		MyThread t2=new MyThread(1);
		MyThread t3=new MyThread(2);
		t1.start();
		t2.start();
		t3.start();
		
	}
	private static int num=0;
	static class MyThread extends Thread{
		private int version;
		public MyThread(int version){
			this.version= version;
		}
		
		public void run(){
			while(num<75){				
				synchronized (MyThread.class){
					if(num<75&&num%15/5==version){
						num++;
						System.out.println(version+":"+num);
				}
				}
				
			}
		}
	}
	
}

   案例2:

    模拟小张一家四口(小张,小张媳妇,小张他爸,小张他妈)

扫描二维码关注公众号,回复: 3085780 查看本文章

    分别拿着小张的银行卡去银行存取钱。

package com.hyxy.se.day13.homework;
/**
 * 模拟四个人操作同一张卡,存取钱
 * 
 * */
public class Test03 {
	public static void main(String[] args) {
		BankCard c = new BankCard("6225000000000000",1000);
		Person p1 = new Person(c,"小张",200);
		Person p2 = new Person(c,"小张媳妇",-500);
		Person p3 = new Person(c,"小张老丈人",400);
		Person p4 = new Person(c,"小张丈母娘",-800);
		
		p1.start();
		p2.start();
		p3.start();
		p4.start();
		
		
	}
}
class Person extends Thread{
	private BankCard card;
	private double money;
	public Person(BankCard card,String name,double money) {
		this.card = card;
		setName(name);
		this.money = money;
	}
	public void run() {
		card.handle(money);
	}
}
class BankCard{
	private String idcard;
	private double balance;
	public BankCard(String idcard, double balance) {
		super();
		this.idcard = idcard;
		this.balance = balance;
	}
	/**操作银行卡方法
	 * money为负数:表示取钱
	 * money为正数: 表示存钱
	 * */
	public synchronized void handle(double money) {
		if(money+balance>0) {
			balance+=money;
			System.out.println(Thread.currentThread().getName()+"操作:"+money+",成功,余额:"+balance);
		}else {
			System.out.println(Thread.currentThread().getName()+"操作:"+money+",余额不足:"+balance);
		}
	}
}

案例3:

模拟火车站四个窗口卖票,固定票数100张

package com.hyxy.se.day13;

import java.awt.Window;

public class Test01 {
	public static void main(String[] args) {
		Ticket t=new Ticket(100);
		Thread w1=new Thread("窗口1");
		Thread w2=new Thread("窗口2");
		Thread w3=new Thread("窗口3");
		Thread w4=new Thread("窗口4");
		w1.start();
		w2.start();
		w3.start();
		w4.start();
	}
}
class GO extends Thread{
	private Ticket t;
	public GO(Ticket t){
		this.t=t;
	}
	public void run(){		
		while(t.getTicket()!=0){
			t.sale();
		}		
	}
}
class Ticket{
	public static int Ticket=100;
	private int windows;
	public Ticket(int Ticket){
		this.Ticket=Ticket;
	}
	
	public static int getTicket() {
		return Ticket;
	}

	public static void setTicket(int ticket) {
		Ticket = ticket;
	}

public synchronized void sale(){
		if(Ticket!=0){
			Ticket--;		
			System.out.println(windows+"开始售票");
			System.out.println("票数剩余:"+Ticket);
			
		}
	}
	}

 

猜你喜欢

转载自blog.csdn.net/qq_42721694/article/details/82194510