大数据第九天内容

笔记部分:


创建线程方式

-----------------

1.Thread

2.Runnable{public void run();}


class Man extends Person implements Runnable{

public void run(){

...

}

}


new Car().start();

new Thread(new Man()).start();


eclipse

---------------

alt + ///代码辅助

alt + 上箭头//向上移动一行

alt + 下箭头//向上移动一行

alt + shift + 上箭头        //向上复制一行

alt + shift + 下箭头        //向下复制一行

ctrl + D//删除一行


String

-----------------

1. ==     //判断是否是同一对象。判断对象的内存地址。

2. equals     //是判断两个对象内容是否相同。

split(String reg);     //按照指定的字符串进行拆分,返回值数组。

substring(int start);        //取子串操作,指定起始索引之后的所有字符

substring(int start,int end);//取子串操作,指定起始索引和结束索引之间的全部字符,

     //包含起始索引,不含结尾索引。[a,b)属于半开半闭区间。

byteByte     //包装类

shortShort

intInteger

longLong

floatFloat

douleDouble

booleanBoolean

charCharacter

byte b = 127 ;

Byte b = new Byte(127);


StringBuffer  

字符串缓冲区

StringBuffer是字符串变量,它的对象是可以扩充和修改的。

append方法可以追加字符串,字符,对象等


和String相比:当String方法执行Sting=String+i等情况时,实际上String对象是不可改变对象,因此不断地在创建对象,并字符串池中也不断增加,原来对像再被回收,String执行效率低。


StringBuffer中的方法是被synchronized修饰的,是同步的,线程安全的,同一时间只有一个对像可以执行,锁是执行时的当前StringBuffer对象


StringBuilder没有被synchronized修饰的,非同步的

性能不一致,StringBuilder在每次访问的时候不需要判断对像锁是否被占用,性能更好效率更高。


作业部分:


1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉。蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s。

十只蜜蜂和两只熊。


代码:

package com.work.ten;

class Bear extends Thread{
	
	private FengMi fengmi;
	
	private String bearname;
	
	
	public Bear(FengMi fengmi,String  bearname){
		
		this.fengmi=fengmi;
		
		this.bearname=bearname;
		
	}
	
	public void run(){
		

		
		while(true){
			
		synchronized(fengmi){
		
		if (fengmi.getFengmiWeight()<10) {
			
		try {
		
		fengmi.wait();
			
		}
		catch (Exception e){
			
		}
			
		}
		
		else if(fengmi.getFengmiWeight()>=10&&fengmi.getFengmiWeight()%10==0){
			
			    
				fengmi.ChiFemgmi();
		
				System.out.println("10 斤蜂蜜被"+bearname+"吃掉,剩余"+fengmi.getFengmiWeight()+"斤蜂蜜");
		
			try{
		
				fengmi.notifyAll();
				
			}
			
			catch(Exception e){
				
				
			}	
				
		}
		
		
		}
		
		yield();
	
	}
	
}

}


class FengMi {
	
	private static int fengmiWeight=0; //蜜罐中蜂蜜数量
	
	private  final int fengmiWeightMax=20; //蜜罐中蜂蜜数量上限

	public  int getFengmiWeight() {
		return fengmiWeight;
	}


	public int getFengmiWeightMax() {
		return fengmiWeightMax;
	}
	

	public void CreateFemgmi() { //生产蜂蜜
		this.fengmiWeight += 1;
	}
	
	public void ChiFemgmi() { //吃蜂蜜
		this.fengmiWeight -=10;
	}
	
}



class Bee extends Thread{
	
	private FengMi fengmi;
	
	private String  beename;
	
	
	public Bee(FengMi fengmi,String beename){
		
		this.fengmi=fengmi;
		
		this.beename=beename;
		
	}
	
	public void run(){
		
		int i=1;
		
		while(true){
			
		synchronized(fengmi){
			
		if(fengmi.getFengmiWeight()<fengmi.getFengmiWeightMax()){
			
			
			if(fengmi.getFengmiWeight()==0){
				
				try{

					fengmi.CreateFemgmi();
					
					System.out.println("蜂蜜采集好了,目前一共"+fengmi.getFengmiWeight()+"斤蜂蜜");
				
					fengmi.notifyAll();
				
					Thread.sleep(10);
					
					System.out.println("经过10ms,蜜蜂休息好了");
								
				}

				catch(Exception e){
					
				}
				
			}
			
			else {
				
				if (fengmi.getFengmiWeight()%10==0){
					
					try{

						fengmi.CreateFemgmi();
						
						System.out.println("蜂蜜采集好了,目前一共"+fengmi.getFengmiWeight()+"斤蜂蜜");
					
						fengmi.notifyAll();
					
						Thread.sleep(10);
						
						System.out.println("经过10ms,蜜蜂休息好了");
					
									
					}

					catch(Exception e){
						
					}
				
					}
				
				else {
					
					try{

						fengmi.CreateFemgmi();
						
						if(fengmi.getFengmiWeight()%10==0){
							
							System.out.println("蜂蜜采集好了,目前一共"+fengmi.getFengmiWeight()+"斤蜂蜜,熊可以来采了");
						}
						
						else  System.out.println("蜂蜜采集好了,目前一共"+fengmi.getFengmiWeight()+"斤蜂蜜");
					
						fengmi.notifyAll();
					
						Thread.sleep(10);
						
						System.out.println("经过10ms,蜜蜂休息好了");
									
					}

					catch(Exception e){
						
					}
					
				}
					
					
				}
			}
				

			
		else {
			
			System.out.println("蜂蜜满了");
			
			try{			
			
			fengmi.wait();
			
			}
			catch(Exception e){
				
			}
			
			}	
			
		}
		
		i++;
		
		yield();
		
		
		
		}
	
	}
	
}




class 	BeeBearModel2{
	
	public static void main(String[] args){
		
		
		FengMi fengmi=new FengMi();
			
		Bear bear1=new Bear(fengmi,"Bear1");	
		
		
		Bee bee1=new Bee(fengmi,"Bee1");	
		
		Bee bee2=new Bee(fengmi,"Bee2");	

		bear1.start();
		
		
		bee1.start();

		bee2.start();
	}
	
	
}


作业1运行结果(部分):


蜂蜜采集好了,目前一共18斤蜂蜜

经过10ms,蜜蜂休息好了

蜂蜜采集好了,目前一共19斤蜂蜜

经过10ms,蜜蜂休息好了

蜂蜜采集好了,目前一共20斤蜂蜜,熊可以来采了

经过10ms,蜜蜂休息好了

10 斤蜂蜜被Bear1吃掉,剩余10斤蜂蜜

蜂蜜采集好了,目前一共11斤蜂蜜

经过10ms,蜜蜂休息好了

蜂蜜采集好了,目前一共12斤蜂蜜

经过10ms,蜜蜂休息好了

蜂蜜采集好了,目前一共13斤蜂蜜

经过10ms,蜜蜂休息好了



作业2

取出两个字符串中最大的公共子串。

package com.work.nine;

public class Find {
	
	private String checkString1;
	
	private String checkString2;

	public String getCheckString1() {
		return checkString1;
	}

	public void setCheckString1(String checkString1) {
		this.checkString1 = checkString1;
	}

	public String getCheckString2() {
		return checkString2;
	}

	public void setCheckString2(String checkString2) {
		this.checkString2 = checkString2;
	}
	
	public Find(String checkString1,String checkString2){
		
		this.checkString1=checkString1;
		
		this.checkString2=checkString2;
	}
	
	
	public String FindMaxPublicString(boolean result){
		
		if(checkString1==null||checkString2==null) return "";
		
		else{
			
			String temp=this.checkString2;
		
		
		if(result){
			
			temp=temp.toLowerCase();
			
			String String1Lower=this.checkString1.toLowerCase();
			
			String String2Lower=this.checkString2.toLowerCase();
			
			if(String1Lower.equals(String2Lower)) return this.checkString1;
			
			else{
					
					while(!String1Lower.contains(temp)){
						
						temp=temp.substring(0, temp.length()-1);
					}
					
					return temp;
					
				}
			
		}
		
 
		
		else{
			
			if(this.checkString1.equals(this.checkString2)) return this.checkString1;
			
			
			else{
					
					while(!this.checkString1.contains(temp)){
						
						temp=temp.substring(0, temp.length()-1);
					}
					
					return temp;
					
				}
			
		}
		
		}
	

	
}
	
}

package com.work.nine;

class MaxPublicStringDemo{
	
	
	public static void main(String[] args){
		
		Find find1=new Find("ABCDEFG","");
		
		Find find2=new Find("ABCDEFG","ABCDEFG");
		
		Find find3=new Find("ABCDEFG","HIGKLMN");
		
		Find find4=new Find("ABCDEFG","AB");
		
		Find find5=new Find("ABCDEFG","ab");
		
		Find find11=new Find("ABCDEFG","AABBCCD");
		
		System.out.println("最大的公共子串为"+find1.FindMaxPublicString(false));
		
		System.out.println("最大的公共子串为"+find2.FindMaxPublicString(false));
		
		System.out.println("最大的公共子串为"+find3.FindMaxPublicString(false));
		
		System.out.println("最大的公共子串为"+find4.FindMaxPublicString(false));
		
		System.out.println("最大的公共子串为"+find5.FindMaxPublicString(false));
		
		System.out.println("最大的公共子串为"+find11.FindMaxPublicString(false));
		
		System.out.println("--------------------------------------------");
		
		
		Find find6=new Find("ABCDEFG","");
		
		Find find7=new Find("ABCDEFG","ABCDEFG");
		
		Find find8=new Find("ABCDEFG","AACCEEG");
		
		Find find9=new Find("ABCDEFG","AB");
		
		Find find10=new Find("ABCDEFG","abcdefg");
		
		System.out.println("最大的公共子串为"+find6.FindMaxPublicString(true));
		
		System.out.println("最大的公共子串为"+find7.FindMaxPublicString(true));
		
		System.out.println("最大的公共子串为"+find8.FindMaxPublicString(true));
		
		System.out.println("最大的公共子串为"+find9.FindMaxPublicString(true));
		
		System.out.println("最大的公共子串为"+find10.FindMaxPublicString(true));
		
	}
	
}

结果:


最大的公共子串为

最大的公共子串为ABCDEFG

最大的公共子串为

最大的公共子串为AB

最大的公共子串为

最大的公共子串为A

--------------------------------------------

最大的公共子串为

最大的公共子串为ABCDEFG

最大的公共子串为a

最大的公共子串为ab

最大的公共子串为ABCDEFG



作业3

StringBuffer是线程安全的,StringBuilder不是线程安全。单线程访问情况下,性能是否一致?

性能不一致,StringBuilder在每次访问的时候不需要判断对像锁是否被占用,性能更好效率更高。



作业4

完成8种基本数据类包装类的练习,完成自动拆装箱操作。

package com.work.nine;

public class chaizhuang {

	public static void main(String[] args){
		
		// byte类型的自动装箱与拆箱
        Byte b1 = 1;
        byte b2 = b1;
        System.out.println("Byte " + (b1 == b2));

        // Short类型的自动装箱与拆箱
        Short s1 = 1;
        short s2 = s1;
        System.out.println("Short " + (s1 == s2));

        // Integer类型的自动装箱与拆箱
        Integer int1 = 1;
        int int2 = int1;
        System.out.println("Integer " + (int1 == int2));

        // Long类型的自动装箱与拆箱
        Long long1 = 1L;
        long long2 = long1;
        System.out.println("Long " + (long1 == long2));

        // Float类型的自动装箱与拆箱
        Float f1 = 3.1415f;
        float f2 = f1;
        System.out.println("Float " + (f1 == f2));

        // Double类型的自动装箱与拆箱
        Double d1 = 3.1415d;
        double d2 = d1;
        System.out.println("Double " + (d1 == d2));

        // 字符类型的自动装箱与拆箱
        Character c1 = 'a';
        char c2 = c1;
        System.out.println("Character" + (c1 == c2));

        // Boolean类型的自动装箱与拆箱
        Boolean bool1 = false;
        boolean bool2 = bool1;
        System.out.println("Boolean " + (bool1 == bool2));
		
		
	}
	
}


你可能感兴趣的:(多线程,StringBuilder,StringBuffer)