20天jvava(17)

corejava day12
2011/8/8
==========================
上周内容回顾:
day07:静态内部类 - 定义在类体中,用static修饰
特点:内部可以定义静态和非静态成员
只能访问外部类的静态成员
类似于静态变量,使用类名直接访问
成员内部类 - 定义在类体中,不使用static修饰
特点:内部只能定义非静态成员
能够访问外部类的所有成员
使用外部类的对象才能创建内部类的对象
day08:局部内部类 - 定义在方法中的内部类
特点:不能使用修饰符和static关键字
内部只能定义非静态成员
只能够在当前方法中使用局部内部类
匿名类 - 一个没有名称的特殊内部类
特点:既可以继承父类,也可以实现接口
new 父类|接口(){
匿名类的主体
}
匿名类本身没有构造方法,
但在运行时自动调用父类无参构造方法
内部也不能定义静态成员
Java中的事件机制 - 事件源负责引发事件和注册监听器
监听器负责接收事件和处理事件
事件对象是由事件源在事件发生时传递给监听器
日期处理 - Date 代表日期和时间
SimpleDateFormat 对日期进行格式化
日期模式 yyyy-MM-dd hh(12)|HH(24):mm:ss
方法:parse、format
Calendar 代表历法
方法:setTime、getTime、get、set、add
String
^
|
|
long<--->Date <--->Calendar
异常处理:对Java中意外引入异常机制,
从而能够进行标准规范的处理。
异常类的层次结构:
Throwable - 方法:getMessage()、printStackTrace()
|
|--Error 代表不可恢复的严重错误,如内存溢出
|--Exception 代表可以处理的意外情况
|
|--必须被处理的异常类,如PaseException
| IOException...
|-->RuntimeException
运行时异常,不需要被处理,
NullPointerException...
处理异常的两种方式:
a.抛出异常:将异常抛给调用者(方法),
方法名(参数列表) throws 异常类{...}
b.捕获异常:try{
//可能出现异常的代码
}catch(异常类型1 e){
}catch(异常类型2 e){
}finally{
}
day09:File类 - 代表文件和目录,进行管理操作,
不能操作文件内容
RandomAccessFile类 - 随机读写文件的内容,
所操作的文件相当于一个字节数组,
通过文件指针维护文件的位置
day10:IO流的分类 - 流是对输入、输出的抽象
按操作分类:输入流和输出流
按数据分类:字节流和字符流
InputStream类:字节输入流
子类:FileInputStream类 - 读取文件
ByteArrayInputStream类 - 读取字节数组
OutputStream类:字节输出流
子类:FileOutputStream类
ByteArrayOutputStream类
对象序列化:ObjectOutputStream类
对象->文件 writeObject()方法
对象反序列化:ObjectInputStream类
文件->对象 readObject()方法
day11:字符编码 - 当字符串转换成字节时所使用的编码规则
ISO8859-1,GB2312,GBK,UTF-16BE,UTF-8
Writer类 - 字符输出流
子类:FileWriter类、BufferedWriter类、
PrintWriter类、OutputStreamWriter类
Reader类 - 字符输入流
子类:FileReader类、BufferedReader类、
InputStreamReader类
========================================
corejava day12 - 多线程、线程的状态转换
2011/8/8
========================================
1.多线程的基本概念
1)程序:指的是指令和一些数据的集合,
程序通常保存在磁盘上
2)进程:指的是运行中的程序,
占用内存和系统资源(CPU、IO)
在运行一个java程序,系统建立JVM进程(java.exe)
3)线程:指的是进程中的一个执行过程,
一个进程可以由1到多个线程组成,线程运行在进程当中
进程和线程的区别:
a)进程占用内存和系统资源
b)线程共享进程中的系统资源和对象
4)并发:多个线程同时执行称为并发执行
如数据库服务器和Web服务器,都能够并发响应客户端的请求
5)同步:按顺序的分开执行
6)异步:部分时间先后的并发执行
2.建立多线程的Java程序
1)主线程:Java程序在运行时首先建立主线程,
它从main()方法开始执行
2)在主线程之外创建单独的线程,这些线程和主线程并发执行
3)建立多线程的2种方式:
a)从java.lang.Thread继承
b)实现java.lang.Runnable接口
3.Thread类
1)Thread类代表一个线程,
主要方法有:run()和start()
run()方法当中包含可以并发执行的代码,
start()方法用于启动一个线程
2)使用Thread类的基本步骤:
a.定义Thread的子类
b.重写run()方法 - public void run()
c.定义Thread的实例,通过这个实例调用start()
方法启动一个线程,
start()方法会自动调用run()方法
不要重写start()方法,也不要手工调用run()方法
3)Thread类的成员:
常量 :MAX_PRIORITY=10
MIN_PRIORITY=1
NOMORL_PRIORITY=5
优先级的范围在1到10之间,
具有较高优先级的线程会优先执行
构造方法:Thread()
Thread(String name) - name指定线程的名称
Thread(Runnable target) - 使用Runnable接口创建一个新的线程
Thread(Runnable target,String name)
常用方法:long getId() - 返回线程的标识符
String getName() - 返回线程的名称
int getPriority() - 返回优先级的数值
void setPriority(int priority) - 设置优先级
static Thread currentThread() -
返回当前正在运行的线程Thread对象
static void sleep(long miles) -
使当前线程休眠指定的时间,参数单位是毫秒
4.Runnable接口 - 通过接口的方法run()
指定一个线程的执行过程
1)Runnable接口中只有一个方法:
public void run();
2)使用Runnable接口的步骤:
a.定义Runnable接口的实现类
b.实现run()方法,包含需要并发执行的代码
c.将Runnable实现类的对象传递给Thread对象
d.调用Thread对象的start()方法启动新的线程
3)通过匿名类使用Runnable接口
5.线程的状态转换
1)线程的状态:
a.新建状态(New):创建一个线程对象后,首先进入新建状态
b.就绪状态(Runnable):调用start()方法,线程进入就绪状态,
此时线程可以在JVM的调度下进入运行状态。
c.运行状态(Running):占用CPU的时间,
执行run()方法中的代码
d.阻塞状态(Blocked):线程暂停执行,让出CPU,
进入到阻塞状态。
有下列几种方式:睡眠(Thread.sleep)
等待(wait和notify,Object类的方法)
wait方法使一个对象进入等待状态,
notify方法可以唤醒一个对象使其所在的线程重新进入就绪状态
I/O阻塞 在使用I/O读写数据时,都会发生I/O阻塞,
如System.out.println()
new Scanner(System.in).next()
new BufferedReader(..).readLine()
e.死亡状态(Dead):当线程中run()方法的代码执行结束,
线程进入死亡状态,线程结束
2)线程状态管理
a.Thread.yield()方法:
处于运行状态的线程使用yield方法,
会暂停其自身的执行,让出CPU,重新进入就绪状态
b.Thread.sleep()方法:Running->Blocked
c.void interrupt()方法:Blocked->Exception
处于阻塞状态的线程,在中断后会抛出异常
d.void join():加入另外一个线程,
当前线程会进入阻塞状态,
直到它加入的线程运行结束,
当前线程才会进入就绪状态
Running->Blocked->Runnable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值