笔记心得10

IO总结
InputStream
|==节点流(流开始的地方,流的源头)
|-- FileInputStream
|--ByteArrayInputStream
|==过滤流()
|--BufferedInputStream
|--ObjectInputStream
|--ZipInputStream
|--InputStreamReader
OutputStream
|==节点流(流结束的地方,流的目的)
|-- FileOutputStream
|--ByteArrayOutputStream
|==过滤流()
|--BufferedOutputStream
|--ObjectOutputStream
|--ZipOutputStream
|--OutputStreamWriter
文本的处理(完成byte <------> char  编码转换 )

Reader
|--核心 处理 InputStreamReader   byte--解码->char 
GBK(byte)-->javaUnicode(char)
|--FileReader=InputStreamReader+FileInputStream
|--BufferedReader 提供了readline()
Writer
|-- OutputStreamWriter      char--编码-->byte
javaUnicode(char) --> GBK(byte)
|--FileWriter=OutputStreamWriter+FileoutputStream
|--PrintWriter 提供了 println();
线程
1 new
2 Runnable
3 Running
4 Block
5 Dided
线程状态管理
Thread.yield()让出当前线程让出处理器(离开Running)进入Runnable状态
使当前线程进Runnable
Thread.sleep(times)使当前线程从Running放弃处理器进入Block状态,休眠times毫秒,再返回到Runnable
如果其他线程打断当前线程的Block(sleep),就会发生 InterruptedException

后台线程(守护线程,精灵线程)
t.setDaemon(true);
Java进程的结束:当所有前台线程都结束的时候,java进程结束
后台线程,不管是否结束,都被停掉

线程的优先级
默认有10优先级,优先级高的线程获得执行的机会多,机会的多少不能通过代码干预
默认的优先级是5

两种方式创建线程
1继承Thread类
a继承Thread类,覆盖run()方法,提供并发线程的过程
b创建这个类的实例
c使用start方法启动线程
2实现Runnable接口
a实现Runnable接口,实现run()方法,提供并发线程的过程
b创建这个类的实例,用这实例作为Thread构造器参数创建Thread
c使用start()方法启动线程
class Foo Implenents Runnable{
public void run(){
}
}
Thread t=new Thread(new Foo());
t.start();
3使用内部类创建线程

线程的同步
1多个线程并发读写同一个临界资源时候会发生线程安全问题
2可以使用同步代码块来解决同步读写临界资源,解决并发安全问题。
3 a同步代码块
synchroized(同步监视器){
}
b同步监视器是一个任意对象实例,是一个多线程之间的互斥的锁机制,多个线程要
使用同一个“监视器”实现同步互斥
c常见写法:synchronized(this){
}
d如果方法的全部过程需要同步,可以简单使用synchronized修饰

Java中同步API
1 StringBuffer是同步的 相当于 synchronized append();
StringBuilder不是同步的 相当于 append();
2 Vector 和 Hashtable 是同步的
Arraylist 和 HashMap 是非同步的
3 Collections
.synchronizedList(list<T>list);方法
ArrayList list=new Arraylist();
list synclist=Collections.synchronizedList(list);
这样就得到一个同步的集合list

异步线程之间,需要协作通信
异步写文件操作
       方法可能会出现线程安全性问题

1 同步写文件:从控制台读取一行,立即写到文件中
wait是需要锁的
Timer  计时器

你可能感兴趣的:(thread,多线程,C++,c,C#)