zoukankan      html  css  js  c++  java
  • 2019.3.9作业

    1、模拟多人爬山

    package com.work.climb;
    
    public class ClimbRunnable extends Thread{
    	
    	private int time;
    	private int num;
    	
    	public ClimbRunnable() {}
    	
    	public ClimbRunnable(int time, String name,int num) {
    		super(name);
    		this.time = time;
    		this.num = num;
    	}
    
    	public void run() {
    		while(this.num>0) {
    			try {
    				Thread.sleep(this.time);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			System.out.println(Thread.currentThread().getName()+"已爬100米");
    			this.num = this.num - 1;
    		}
    		System.out.println(Thread.currentThread().getName()+"爬到山顶!");
    	}
    	
    	public static void main(String[] args) {
    		ClimbRunnable c1 = new ClimbRunnable(200,"年轻人",10);
    		ClimbRunnable c2 = new ClimbRunnable(500,"老年人",10);
    		
    		c1.start();
    		c2.start();
    	}
    }
    

      结果示例:

    2、模拟叫号看病

    package com.java.doctor;
    
    public class DoctorThread extends Thread{
    
    	private int number;//看病人数
    
    	public DoctorThread() {
    		super();
    	}
    
    	public DoctorThread(String name,int number) {
    		super(name);
    		this.number = number;
    	}
    
    	public int getNumber() {
    		return number;
    	}
    
    	public void setNumber(int number) {
    		this.number = number;
    	}
    
    	public void run() {
    		for(int i = 1;i<=this.number;i++) {
    			System.out.println(Thread.currentThread().getName()+":"+i+"号病人正在看病!");
    		}
    	}
    
    	public static void main(String[] args) {
    		DoctorThread special = new DoctorThread("特需号",10);
    		//将主进程重命名为普通号
    		Thread.currentThread().setName("普通号");
    //		special.setPriority(10);
    //		ordinary.setPriority(1);
    		special.start();
    		
    		try {
    			for(int i = 1;i<=50;i++) {
    				//如果普通号到49号后,特需号还未看完,先暂停普通号,看完特需号再继续
    				if(i == 49) {
    					special.join();
    				}
    				System.out.println(Thread.currentThread().getName()+":"+i+"号病人正在看病!");
    			}
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      结果示例:

    3、模拟接力赛跑

    package com.java.race;
    /**
     * 模拟接力赛跑
     * @author Administrator
     *
     */
    public class Race implements Runnable{
    	private int length = 1000; //剩余赛程
    
    	public void run() {
    		String name = Thread.currentThread().getName();
    		while(true) {
    			synchronized(this) {
    				if(length<=0) {
    					break;
    				}
    				length -= 100;
    				try {
    					Thread.sleep(200);
    				} catch (InterruptedException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    				System.out.println(name+"接力!");
    				for(int i = 1;i<11;i++) {
    					System.out.println(name+"跑了"+i*10+"米");
    				}
    				
    			}
    			try {
    				Thread.sleep(500);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		Race r = new Race();
    		Thread t1 = new Thread(r,"1号选手");
    		Thread t2 = new Thread(r,"2号选手");
    		Thread t3 = new Thread(r,"3号选手");
    		Thread t4 = new Thread(r,"4号选手");
    
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    	}
    	
    
    }
    

      结果示例:

    4、模拟网站抢票

    package com.java.ticket;
    /**
     * 模拟网站抢票系统,有三个用户:桃跑跑、黄牛党、张票票,如果是黄牛党只允许抢购一张
     * @author Administrator
     *
     */
    public class Ticket implements Runnable{
    	
    	private int count = 10; //剩余票数
    	private int num = 0; //当前用户抢到的第几张票
    	
    	public void run() {
    		String name = Thread.currentThread().getName();
    		while(true) {
    			//根据sale()方法返回值判断是否为黄牛党,如果是结束线程
    			if(sale(name)) {
    				break;
    			}
    		}
    	}
    	
    	public synchronized boolean sale(String name) {
    		if(count<=0) {
    			return true;
    		}
    		count--;
    		num++;
    		try {
    			Thread.sleep(100);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		System.out.println(name+"抢到第"+num+"张票,"+"剩余"+count+"张票。");
    		//判断线程名是否为黄牛党,如果是返回true
    		if(name.equals("黄牛党")) {
    			return true;
    		}
    		return false;
    	}
    	
    	public static void main(String[] args) {
    		Ticket t = new Ticket();
    		Thread t1 = new Thread(t,"桃跑跑");
    		Thread t2 = new Thread(t,"黄牛党");
    		Thread t3 = new Thread(t,"张票票");
    		
    		t1.start();
    		t2.start();
    		t3.start();
    		
    	}
    }
    

      结果示例:

  • 相关阅读:
    用KNN算法分类CIFAR-10图片数据
    特征处理(Feature Processing)
    实际问题中如何使用机器学习模型
    CS229 6.18 CNN 的反向传导算法
    【Leetcode】【Medium】Single Number II
    【Leetcode】【Medium】Single Number
    【Leetcode】【Easy】Merge Two Sorted Lists
    【Leetcode】【Easy】Valid Sudoku
    【Leetcode】【Easy】Implement strStr()
    【Leetcode】【Easy】Roman to Integer
  • 原文地址:https://www.cnblogs.com/chenxj/p/10512952.html
Copyright © 2011-2022 走看看