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;
    	}
    }
    

    (三)代码托管

  • 相关阅读:
    P2018 消息传递[dp]
    P1436 棋盘分割[dp]
    一条线段引发的思考
    浅谈树上差分
    P2680 运输计划[二分+LCA+树上差分]
    P1600 天天爱跑步[桶+LCA+树上差分]
    P4560 [IOI2014]Wall 砖墙
    P1311 选择客栈[模拟]
    P1314 聪明的质监员[二分答案]
    Linux snmp导入MIB库
  • 原文地址:https://www.cnblogs.com/yamito/p/6936539.html
Copyright © 2011-2022 走看看