標籤:多線程 stringbuffer stringbuilder
筆記部分:
建立線程方式
-----------------
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));}}
本文出自 “11138113” 部落格,請務必保留此出處http://11148113.blog.51cto.com/11138113/1775411
大資料第九天內容