zoukankan      html  css  js  c++  java
  • Java第十次作业

    (一)学习总结

    2.多线程龟兔赛跑游戏

    class Tortoise implements Runnable{
    	private int totla=0;
    	private int finalTotla;
    	public Tortoise(int finalTotla){
    		this.finalTotla = finalTotla;
    	}
    	public void run(){
    		while(totla<finalTotla){
    			this.totla++;
    			System.out.println("乌龟跑了"+totla+"步");
    		}
    	}
    }
    class Hare implements Runnable{
    	private int totla=0;
    	private int finalTotla;
    	boolean[] flags = {true,false};
    	public Hare(int finalTotla){
    		this.finalTotla=finalTotla;
    	}
    	public void run(){
    		while(totla<finalTotla){
    			 boolean isHareSleep = flags[((int) (Math.random() * 10)) % 2];
    			 if(isHareSleep){
    				 System.out.println("兔子睡着了");
    			 }else{
    				 totla+=2;
    				 System.out.println("兔子跑了"+totla+"步");
    			 }
    		}
    	}
    }
    public class TortoiseHareRace  { 
        public static void main(String[] args) {
            Tortoise tortoise = new Tortoise(10);
            Hare hare = new Hare(10);
            Thread tortoiseThread = new Thread(tortoise);
            Thread hareThread = new Thread(hare);
            tortoiseThread.start();
            hareThread.start();
        }
    }
    

    3.原程序运行结果

    生产者开始生产整数......
    消费者开始消耗整数......
    生产者设定 (1)
    生产者设定 (2)
    生产者设定 (3)
    生产者设定 (4)
    生产者设定 (5)
    生产者设定 (6)
    生产者设定 (7)
    生产者设定 (8)
    生产者设定 (9)
    生产者设定 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    消费者取走 (10)
    

    原因:没有设定代码的同步与等待唤醒

    修改后

    class Consumer implements Runnable {
        private Clerk clerk;
        public Consumer(Clerk clerk) {
            this.clerk = clerk;
        }
        public void run() {
            System.out.println("消费者开始消耗整数......");
            // 消耗10个整数
            for(int i = 1; i <= 10; i++) {
                try {
                     // 等待随机时间
                    Thread.sleep((int) (Math.random() * 3000));
                }
                catch(InterruptedException e) {
                    e.printStackTrace();
                }              
                clerk.getProduct();// 从店员处取走整数
            }
        }
     }
    class Producer implements Runnable {
        private Clerk clerk;
        public Producer(Clerk clerk) {
            this.clerk = clerk;
        }
        public void run() {
            System.out.println( "生产者开始生产整数......");
            // 生产1到10的整数
            for(int product = 1; product <= 10; product++) {
                try {
                    Thread.sleep((int) Math.random() * 3000);
                }
                catch(InterruptedException e) {
                    e.printStackTrace();
                }
               clerk.setProduct(product); // 将产品交给店员
            }
        } 
    }
    public class Demo {
        public static void main(String[] args) {
            Clerk clerk = new Clerk();
            Thread consumerThread = new Thread(new Consumer(clerk)); 
            Thread producerThread = new Thread(new Producer(clerk)); 
            consumerThread.start(); 
            producerThread.start(); 
        }
    }
    class Clerk {
        private int product = -1; // -1 表示目前没有产品
        private int p;
        // 这个方法由生产者呼叫
        public synchronized void setProduct(int product) {
            if (this.product != -1) {
                try {
                    super.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            this.product = product;
            p = this.product;
            System.out.printf("生产者设定 (%d)%n", this.product);
            getProduct();
            this.product = -1;
            super.notify();
        }
    
        // 这个方法由消费者呼叫
        public synchronized int getProduct() {
            if (this.product == -1) {
                try {
                    super.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.printf("消费者取走 (%d)%n", p);
            this.product = -1;
            super.notify();
            return this.product;
        }
    }
    

    运行结果

    生产者开始生产整数......
    消费者开始消耗整数......
    生产者设定 (1)
    消费者取走 (1)
    生产者设定 (2)
    消费者取走 (2)
    生产者设定 (3)
    消费者取走 (3)
    生产者设定 (4)
    消费者取走 (4)
    生产者设定 (5)
    消费者取走 (5)
    生产者设定 (6)
    消费者取走 (6)
    生产者设定 (7)
    消费者取走 (7)
    生产者设定 (8)
    消费者取走 (8)
    生产者设定 (9)
    消费者取走 (9)
    生产者设定 (10)
    消费者取走 (10)
    

    (二)实验总结

    实验内容:

    1.程序设计思路:创建类实现Runnable接口,创建三个线程

    MyThread mt1 = new MyThread();
    new Thread(mt1).start();
    new Thread(mt1).start();
    new Thread(mt1).start();
    

    2.程序设计思路:创建银行类实现钱的存储,创建用户类实现Runnable接口,创建两个线程

    class Bank{
    	private double balance;
    	public void setBalance(double balance){
    		this.balance+=balance;
    	}
    	public double getBalance(){
    		return this.balance;
    	}
    }
    class Person implements Runnable{
    	Bank bank = new Bank();
    	private double money;
    	public Person(double money){
    		this.money = money;
    	}
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		for(int i=0;i<3;i++){
    			bank.setBalance(this.money);
    			System.out.println("存款成功,当前账户余额为"+bank.getBalance());
    		}
    	}
                public void setMoney(double money){
    		this.money = money;
    	}
    	public double getMoney(){
    		return this.money;
    	}
    }
    

    (三)代码托管

  • 相关阅读:
    Hackerrank--Savita And Friends(最小直径生成树MDST)
    Hackerrank--Kundu and Tree
    Hackerrank--String Function Calculation(后缀数组)
    Hackerrank--Ashton and String(后缀数组)
    Foundation 学习
    JS 严格模式
    判断移动设备横竖屏
    Nodejs解析HTML网页模块 jsdom
    百度Map调用
    Jade 报错
  • 原文地址:https://www.cnblogs.com/yamito/p/6936539.html
Copyright © 2011-2022 走看看