⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kid.java

📁 主要是java书上的一些代码
💻 JAVA
字号:
//: Kid.java

//package g3ds.joop.ch6;

public class Kid{
	//设计得到并吃蛋糕的方法
	public void eat(Cake cake){
		//试图得到一片蛋糕
		Cake piece = cake.getPiece();
		
		if(piece != null){		
			//如果分到一份蛋糕,就可以吃啦...
			piece.start();
		}
	}
	
	//测试相关但无需同步的线程
	public static void main(String[] args){
		//设定人数和蛋糕片数,也可设计成通过参数传递进来
		int number = 5;
		
		Kid[] kids = new Kid[number];
		
		//情景输出
		System.out.println("数一数,有 " + kids.length + " 位小朋友。");
		
		//订了蛋糕
		Cake chocolate = new Cake("巧克力", number);
		
		//测试蛋糕没有归属则无法被吃的情况
		chocolate.start();
		
		try{
			//让以上的线程结束后继续下面的语句
			chocolate.join();
		}catch(InterruptedException e){}
		
		System.out.println();
		for(int i=0; i<kids.length; i++){
			kids[i] = new Kid();
			
			//分蛋糕并品尝之
			kids[i].eat(chocolate);
		}
		
		//设置睡眠时间,以便其它线程有时间启动,用join方法更佳
		try{
			Thread.sleep(2000);
		}catch(InterruptedException e){}
		
		//测试计划之外又来人的响应
		System.out.println();
		System.out.println("这时又来了一位小朋友...");
		Kid unluckyKid = new Kid();
		unluckyKid.eat(chocolate);
	}
}


//设计线程类
class Cake extends Thread{
	private int count;
	private boolean isBelonged;
	private Cake[] pieces;
	
	//提供给外部使用的构造方法,相当于每次买的都是大蛋糕
	Cake(String kind, int number){
		System.out.println("今天订的是" + kind + "蛋糕,好吃极啦!");
		
		pieces = new Cake[number];
		
		for(int i=0; i<pieces.length; i++){
			//把蛋糕切片
			pieces[i] = new Cake();
		}
		
		System.out.println("最多可分给 " + number + " 位小朋友。");
		
		//用来记录蛋糕是否分完
		count = number;
	}
	
	//专门用来生成蛋糕片,当然还是蛋糕,只不过小些而已!
	private Cake(){}
	
	//重写的run方法
	public void run(){
		try{
			//还没人吃的状况
			if(!isBelonged){
				System.out.println("人还没来哩,怎么吃呀!");
				
				//提示后直接返回
				return;
			}
			
			//蛋糕已经分到小朋友手中后可进行的状况,实际是线程的主要内容	
			System.out.println(this.getName() + "正被品尝...");
			
			Thread.sleep(500);		
		}catch(InterruptedException e){}
	}
	
	//设计用来分蛋糕的方法
	public Cake getPiece(){
		//蛋糕分完的状况
		if(count<=0){
			System.out.println("对不起,你来晚了,蛋糕已经分完!");
			
			return null;
		}
		
		//还有蛋糕的状况
		int i = count-1;	
		
		pieces[i].isBelonged = true;
		pieces[i].setName("第" + count + "片蛋糕");
		
		count--;
		
		return pieces[i];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -