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之后简化了定义的方式:自动装箱、自动拆箱
四、线程
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之后简化了定义的方式:自动装箱、自动拆箱
相关文章推荐
- Java基础学习笔记12——(Scanner的使用,String类的概述和使用样例)
- [Java基础] Java线程复习笔记
- 【Java基础】线程笔记——显式锁Lock和ReentrantLock
- java线程基础——笔记2
- Java笔记 - 线程基础知识
- java基础学习笔记之九--线程(3)
- Java基础知识强化之集合框架笔记80:HashMap的线程不安全性的体现
- java基础之—String类学习笔记
- 【Java基础学习笔记】Thread+JLabel实现线程
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- 黑马程序员 Java基础学习笔记 线程间同信
- 黑马程序员—11—java基础:有关线程通信的学习笔记和学习心得体会
- 【Java基础】线程笔记——ThreadApi
- Java基础知识强化之多线程笔记03:进程与线程 和 多线程的意义
- 黑马程序言 Java基础学习笔记12 线程的创建
- 【Java基础】线程笔记——创建线程的3种方式
- 【Java基础】线程笔记——线程安全
- Java基础笔记-String类2
- 黑马程序员————Java基础日常笔记---对多线程的理解
- java高并发程序设计学习笔记二多线程基础