笔记部分:
创建线程方式
-----------------
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));
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。