您的位置:首页 > 编程语言 > Java开发

Java基础笔记三线程和String类

2013-11-03 11:44 176 查看
Java基础笔记三

四、线程

1. 进程与线程:

进程:正在执行的程序,每个进程都有一个执行顺序,该顺序是一个执行路径,也叫做控制单元

线程:进程中的一个独立的控制单元,线程在控制着进程的执行,一个进程中至少有一个线程

2. 创建:继承Thread类

子类覆盖父类中的run方法,将线程的代码放在run方法体中

建立子类对象的同时,线程也被创建

通过调用start方法开启线程

3. 状态:创建(new)、运行(start、notify)、冻结(sleep、wait)、消亡(run结束、stop)、临时状态阻塞(具有运行资格,没有执行权)

4. 创建线程方式二:实现Runnable接口

子类覆盖接口中的run方法

通过Thread类创建线程

将实现了Runnable接口的子类对象作为参数传给Thread类中构造函数(因为自定义的run方法在实现了Runnable接口的子类中,要让线程去执行指定对象的run方法,必须指定run方法所属的对象)

Thread类对象调用start方法开启线程

5. 两种创建方式的区别:

实现方式避免了单继承的局限性,在定义线程时,建议使用实现方式

继承的代码存放在Thread子类的run方法中,实现的代码存放在实现接口子类的run方法中

6. 安全问题:多个线程访问出现延迟

线程的随机性

7. 同步(synchronized):

多线程安全问题:

1) 原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个进程参与进来,导致进程共享数据的错误

2) 解决:对多条操作共享数据的语句,只能让一个线程都执行完,执行的过程中其他线程不能参与,使用Java中同步操作

synchronized(对象)

{

需要同步的代码;

}

注:对象如同锁,持有锁的线程可以在同步中执行,没有持有锁的线程即使获取了cpu执行权,也进不去

前提:1)需要两个或两个以上线程

2)多个线程使用的是同一个锁

利与弊:解决了线程安全问题,多个线程需要判断锁,消耗资源

同步函数:在函数上加上synchronized修饰符即可,同步函数使用的锁是this,被静态修饰后的同步函数使用的锁不是this,是字节码对象

8. 线程结束:定义循环结束标记

使用interrupt(中断)方法

五、String类

1. 理解:字符串是一个特殊的对象,一旦被初始化就不可以被改变

2. 常用方法:获取:

1) 获取字符串的长度

int length()

2) 根据位置获取位置上的某个字符

char charAt(int index )

3) 根据字符获取字符在该字符串上的位置

int indexOf(int ch)字符串中第一次出现的位置

int indexOf(int ch,int fromIndex)从指定位置开始,获取ch在字符串中的位置

int indexOf(String str)字符串中第一次出现的位置

int indexOf(String str,int fromIndex)从指定位置开始,获取str在字符串中的位置

判断:

1) 字符串中否包含某一个字串

boolean contains(str)

2) 字符串中是否有内容

boolean isEmpty()

3) 字符串是否以指定的内容开头

boolean startsWith(str)

4) 字符串是否以指定的内容结尾

boolean endsWith(str)

5) 判断字符串内容是否相同

boolean equals(str)

6) 判断内容是否相同,并忽略大小写

boolean equalsIgnoreCase(str)

转换:

1) 将字符数组转化为字符串

构造函数:String (char[])

String(char[],offset,count)将字符数组中的一部分转化为字符串

静态方法:static String copyValueOf(char[])

static String copyValueOf(char[],offset,count)

2) 将字符串转成字符数组

char[] toCahrArray()

3) 将字节数组转成字符串

String(byte[])

String(byte[],offset,count)

4) 将字符串转换成字节数组

byte[] getBytes()

5) 将基本数据类型转化成字符串

static String valueOf(int)

static String valueOf(double)

替换:

String replace(oldchar,newchar)

切割:

String[] split(regex)

字串(获取字符串中的一部分):

String substring(begin)从指定位置开始到结尾

String substring(begin,end)包含头,不包含尾

转换:

1) 将字符串转换成大写或者小写

String toUpperCase()

String toLowerCase()

2) 将字符串两端的多个空格去除

Stringtrim()

3) 对两个字符串进行自然顺序的比较

intcompareTo(string)

3. StringBuffer:字符串的组成原理就是通过该类实现的

容器:

1) StringBuffer是一个容器

2) 长度是可以变化的

3) 可以操作多个数据类型

4) 最终会通过toString方法变成字符串

CRUD:

1) 存储:

StringBuffer append()将制定数据作为参数添加到已有数据的结尾处

StringBuffer insert(index,数据)可以将数据插入到指定index位置

2) 删除:

StringBuffer delete(start,end)删除缓冲区中的数据,包含start,不包含end

StringBuffer deleteCharAt(index):删除指定位置的字符

3) 获取:

char charAt(int index)

int indexOf(String str)

int length()

String substring(start,end)

4) 修改:

StringBufferreplace(start,end,string)

voidsetCharAt(int index,char ch)

5) 反转

StringBufferreverse()

StringBuffer与StringBuilder:

StringBuffer是线程同步,StringBuilder是线程不同步,开发建议使用StringBuilder

4. 基本数据类型封装:

好处:在对象中定义更多的功能方法操作该数据

用于基本数据类型与字符串之间的转换

注:JDK1.5之后简化了定义的方式:自动装箱、自动拆箱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: