同步代码块对于锁的操作是隐式的。
jdk1.5以后将同步锁封装成了对象,并将操作锁的隐式方式定义到了该对象(Lock接口)中,将隐式动作变成了显示动作。
Lock接口:出现替代了同步代码块或者同步函数,将同步的隐式所操作变成显示锁操作,同时更为灵活,可以一个锁上加多组监视器。lock():获取锁 unlock():释放锁,通常需要定义在finally代码块中。
Condition接口: 出现代替了Object中的wait,notify, notifyAll方法,将这些监视器方法单独进行了封装,变成Condition监视器对象。可以任意锁进行组合。await(); signal(); signalAll();
停止线程:
1.stop方法
2.run方法结束。线程的任务中都会有循环,控制住循环就可以停止线程任务。
控制循环可以使用标记的方式来控制。
interrupt():使线程从冻结状态强制清除,让线程具有cpu的执行资格,会发生InterruptedException,要处理 。
join():当前线程释放执行资格,该线程加入到当前线程中,执行该线程的任务,当该线程执行完毕以后,再执行原先的线程。
Thread.yield():释放线程执行权。
常用API
String类:字符串是一个特殊的对象。
String s = "abc";//存在于常量池中,如果之前不存在"abc",就创建,如果存在,就直接将引用覆盖变量。
String s = new String("abc");//先看常量池中,是否存在该对象,不存在创建,后拿到该应用,在堆内存中创建String对象,并将该对象的引用赋给变量。
String类相关方法:
获取字符串的长度:int length();
根据位置获取字符:char charAt(int index);
根据字符返回在字符串中第一次出现处的索引:int indexOf(int ch); int indexOf(int ch, int fromIndex); int indexOf(String str); int indexOf(String str, int fromIndex); int LastIndexOf(int ch); int LastIndexOf(int ch, int fromIndex); int LastIndexOf(String str); int LastIndexOf(String str, int fromIndex);
获取字符串中的一部分:String substring(int beginIndex, int endIndex);//包含起始,不包含结束。
将字符串切割成字符数组:String[] split(String regex);
将字符串转换成字符数组:char[] toCharArray();
将字符串转换成字节数组:byte[] getBytes();
将字符串中的字母转换成大小写:String toUpperCase(); String toLowerCase();
将字符串中的内容进行替换:String replace(char oldch, char newch); String replace(String oldch, String newch);
将字符串两端的空格去掉:String trim();
将字符串进行连接:String concat(String str);
判断两个字符串是否相同:boolean equals(Object obj); boolean equalsIgnoreCase(String str);
字符串是否包含指定字符串:boolean contains(String str);
比较两个字符串的大小:int compareTo(String str);
String intern()://对字符串中的池进行操作。
StringBuffer类:就是字符串缓冲区,用于存储数据的容器。
特点:长度可变,可存储不同类型的数据,最终要转换成字符串使用,可以对字符串修改(初始默认长度为16)
void append(Object obj);//向容器中添加数据。
void insert(int index, Object obj);//向指定位置插入数据。
StringBuffer delete(int start, int end);//删除,包含头,不包含尾部。
StringBuffer deleteCharAt(int index);//删除指定索引的数据。
char charAt(int index);//查找指定索引的数据
void setCharAt(int index, char ch);//将指定索引下的数据替换。
void setLength();//设置容器的长度。
jdk1.5以后出现了一个与StringBuffer功能相同的类,它是StringBuilder,
StringBuffer线程同步,StringBuilder线程不同步。
StringBuilder为解决单线程效率低的问题。
jdk的升级:1.简化书写,2.提高效率,3.增加代码安全性。
基本数据类型对象包装类:
为了方便操作基本数据类型值,将其封装成了对象,在对象中封装了属性和行为丰富了该数据的操作。用于描述该对象的类就成为基本数据类型包装类。
基本数据类型--->字符串:1.基本数据类型+“” 2.用String类型的静态方法valueOf(基本数据类型)
字符串--->基本数据类型:1.使用包装类中的静态方法。xxx parseXxx("xxx类型的字符串");2.将包装类对象转换成基本数据类型:Integer a = new Integer("123"); int b = a.intValue();
十进制--->其他进制:toBineryString(int); toOctalString(int); toHexString(int);
其他进制--->十进制:parseInt(String, int radix);
Integer i = 4;//jdk1.5以后,自动装箱
Integer x = 128;//jdk1.5以后,如果数据可以存放在一个字节一内,数据可以被共享。
集合类
集合类的由来:对象用于封装特有数据,对想多了需要存储,如果对象个数不确定,就是用集合容器进行存储。
集合特点:1.用于存储对象的容器,2.集合的长度是可变的。3.集合中不可以存储基本数据类型值。