zoukankan      html  css  js  c++  java
  • Java 9.10习题

    <1>设计4个线程对象,两个线程执行减操作,两个线程执行加操作

    //=================================================
    // File Name       :	Thread4_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    // 类名:Operator
    // 属性:
    // 方法:
    class Operator{
    	
    	private static int i;
    	
    	// 内部类名:Inc
    	// 属性:
    	// 方法:
    	class Inc implements Runnable{
    		
    		@Override
    		public void run() {
    			// TODO 自动生成的方法存根
    			for(int j=0;j<10;j++){
    				this.inc();
    				System.out.println(Thread.currentThread().getName()+",i="+i);
    			}
    		}
    		
    		public synchronized void inc(){
    			i++;
    		}
    		
    	}
    	
    	//内部类名:Dec
    	//属性:
    	//方法:
    	class Dec implements Runnable{
    		
    		@Override
    		public void run() {
    			// TODO 自动生成的方法存根
    			for(int j=0;j<10;j++){
    				this.dec();
    				System.out.println(Thread.currentThread().getName()+",i="+i);
    			}
    		}
    		
    		public synchronized void dec(){
    			i--;
    		}
    	}
    }
    
    
    //主类
    //Function        : 	ThreadStop_demo
    public class Thread4_demo {
    	
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		Operator.Inc inc1 = new Operator().new Inc();		//实例化内部类对象
    		Operator.Inc inc2 = new Operator().new Inc();		//实例化内部类对象
    		Operator.Dec dec1 = new Operator().new Dec();		//实例化内部类对象
    		Operator.Dec dec2 = new Operator().new Dec();		//实例化内部类对象
    		
    		Thread t1 = new Thread(inc1);							//实例化Thread类对象
    		Thread t2 = new Thread(inc2);							//实例化Thread类对象
    		Thread t3 = new Thread(dec1);							//实例化Thread类对象
    		Thread t4 = new Thread(dec2);							//实例化Thread类对象
    		
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    	}
    
    }
    

    <2>设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量。

    //=================================================
    // File Name       :	computer_transfer_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    //类名:Computer
    //属性:
    //方法:
    class Computer {
    	private String name = "未生产";
    	private boolean flag = true;
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public synchronized void set(String name){	//设置信息名称及内容
    		if(!flag){																	//标志位为false,不可以生产,在这里等待取走
    			try{
    				super.wait();												//等待搬运者取走
    			}catch(InterruptedException e){
    				e.printStackTrace();
    			}
    		}	
    		this.setName(name);								//设置信息名称	
    		System.out.println(this.getName());	//输出信息
    		try{
    			Thread.sleep(300);									//加入延迟
    		}catch(InterruptedException e){
    			e.printStackTrace();
    		}
    		flag = false;													//标志位为true,表示可以取走
    		super.notify();											//唤醒等待线程
    	}
    	
    	public synchronized void get(){			//取得信息内容
    		if(flag){															//标志位为true,不可以取走
    			try{
    				super.wait();										//等待生产者生产
    			}catch(InterruptedException e){
    				e.printStackTrace();
    			}
    		}		
    		try {
    			Thread.sleep(300);									//加入延迟
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		this.setName("已经搬运完毕");
    		System.out.println(this.getName());	//输出信息
    		flag = true;													//修改标志位为true,表示可以生产
    		super.notify();											//唤醒等待线程
    	}
    	
    }
    
    //类名:producer
    //属性:
    //方法:
    class producer implements Runnable{		//定义生产者线程
    
    	private Computer com = null;								//保存Computer引用
    	
    	public producer(Computer com) {						//构造函数
    		super();
    		this.com = com;
    	}
    
    	@Override
    	public void run() {
    		int count = 0;
    		// TODO 自动生成的方法存根
    		for(int i=0;i<10;i++){
    			this.com.set("已经生产完毕");
    			count++;
    		}
    		System.out.println("生产的电脑数量:"+count);
    	}
    	
    }
    
    //类名:transfer
    //属性:
    //方法:
    class transfer implements Runnable{		//定义生产者线程
    
    	private Computer com = null;								//保存Computer引用
    	
    	public transfer(Computer com) {						//构造函数
    		super();
    		this.com = com;
    	}
    
    	@Override
    	public void run() {
    		// TODO 自动生成的方法存根
    		for(int i=0;i<10;i++){
    			this.com.get();
    			
    		}
    	}
    	
    }
    
    //主类
    //Function        : 	computer_transfer_demo
    public class computer_transfer_demo {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		Computer c = new Computer();
    		producer pro = new producer(c);
    		transfer tra = new transfer(c);
    		new Thread(pro).start();
    		new Thread(tra).start();
    	}
    
    }
    
  • 相关阅读:
    idea从maven导入jar包
    java zip4j压缩打包zip
    three.js一步一步来--如何画出一个逃跑的圆柱体
    three.js一步一步来--如何用线画出一个面--网格板子
    three.js一步一步来--如何画出一个转动的正方体
    three.js一步一步来--如何画出一根线
    假如你想在VUE的main.js里根据条件按需引入注册组件以及样式,那就这样子写,附赠自己写的vue一个框架配置多系统按需加载系统路由以及组件办法
    React Hook 的底层实现原理
    测试Markdown
    Linux学习总结(十六)系统用户及用户组管理
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5254958.html
Copyright © 2011-2022 走看看