Java基础学习重点归纳(2)—个人向
1.如何实现多线程
1.继承Thread类
覆盖run方法
创建线程对象
启动线程,调用start方法
2.实现Runnable接口
实现run方法
创建目标对象
创建线程对象,将目标对象作为实际参数
启动线程,调用start方法
2.线程状态

3.sleep和wait方法的区别
1.sleep
会让当前线程处于有限期等待状态,同时释放CPU,不释放拥有的锁标记
2.wait
会让当前线程处于阻塞状态,同时释放CPU和锁标记
4.提高线程并发效率的策略
1.用Lock替换早起的synchronized,更灵活、直观,但必须手动释放锁
2.读写锁ReadWriteLock的应用,支持一读多写,从读操作提高并发效率
3.牺牲写操作效率,提高并发效率:CopyOnWriteArrayList,写操作时进行拷贝一个副本文,读操作时不加任何锁
4.利用无锁算法(简称CAS算法)提高并发效率:ConcurrentLinkedQueue
5.减小锁粒度提高并发效率:ConcurrentHashMap
5.ArrayList和CopyOnWriteArrayList的区别
ArrayList
线程不安全,运行效率高
CopyOnWriteArrayList
线程安全,在读操作远远大于写操作的场景下,运行效率相对比较高
6.HashMap和ConcurrentHashMap的区别
HashMap
线程不安全,运行效率高,允许null作为键/值
ConcurrentHashMap
线程安全,在全局操作不频繁的场景下,并发效率相对比较高,不允许null作为键/值
7.流分类
1.方向
输出流:用以将<内存>中的内容写入到<存储设备>当中
输入流:用以将<存储设备>中的内容读入到<内存>当中
2.单位
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,可以读写文本数据
3.功能
节点流:实际传输数据
过滤流:强加节点流功能
8.文件拷贝
FileOutputStream f1 = new FileOutputStream("file/a_copy.txt");
FileInputStream f2 = new FileInputStream("file/a.txt");
while(true){
int r = f2.read();
if(r == -1) break;
f1.write(r);
}
f2.close();
f1.close();