第六周总结,关于异常和线程的知识点

这周主要学了异常和线程两个方面。
首先说异常,异常分为两个方面,一个是无法手动处理的,也就是Error,还有就是可以手动处理的Exception了。Error不用太关注,最为常见的就是堆或者栈内存溢出。Exception是所有异常的祖宗。

Exception大致可分为运行时异常和受查异常,其中受查异常必须声名,就是由throws关键字接在形参之后,运行时异常可以不用处理,由jvm默认处理。异常可以手动throw抛出,或者由jvm自动处理,处理异常相当于return关键字。throws是消极的处理方式,也可以选择try{}catch{}finally{}积极的处理方式。其中一点要注意一下,catch的时候,父类在下。继续往下说,就是自定义异常了,很简单啊,就是一个类,继承Exception嘛,但有一个特殊的,就是继承RuntimeException,也就是继承运行时异常,其他的都是受查异常。最后呢,就是异常的覆盖,总结一下就是子类比父类范围小,但可以数量多,嗯,就这样。
还有就是线程了。线程又分为初级线程和高级线程。咱们先说初级线程哈。先说一下,什么是进程,进程就是运行时的程序,而线程又称为轻量级的进程。接着就提到了多线程的概念,多线程就是进程由多个线程组成,彼此间完成不同的工作,交替执行。线程包括时间片,运行数据和逻辑代码。创建线程的方式呢,先学到了直接继承Thread类或者实现Runnable接口两种方法,然后学到了sleep(休眠)、yield(放弃)、join(加入)三种方法。然后就学到了第一种锁,synchronized锁,它可以以代码块的形式或者在返回值类型之前直接修饰方法两种形式。接着,讲解了一下死锁和消费者、生产者的例子。最后,讲线程通信,其中有wait和notify两个方法。高级线程,先提到了线程池的概念,通过newFixedThreadPool()定长线程池或者newCachedThreadPool()动态线程池两种方式获得线程池。接着又讲了Callable接口,他比Runnable更方便,但是它有一个和泛型类型一样的返回值需要注意。其中就是Future接口了。顺便提一下,同步和异步的区别。然后就又讲了一种锁——Lock,他与synchrionized不同,他是显示锁的,通过lock(),unlock()两个方法。注意,一定要小心递归锁,也就是重写锁的情况。接着又讲了最后一个锁,读写锁。创建形式都一样,就是分的更具体了。最后一个方面就是线程安全的集合了,其中包括Collections中被synchronized修饰的方法,还有就是CopyOnWriteArrayList和CopyOnWriteArraySet。最后还有一个Co’n’cu’r’ren’tHashMap,他有1.7和1.8两个版本,需要注意一下。最后就是Queue队列了,他是一个接口,他的实现类是ConcurrentLinkedQueue。最后就是BlockingQueue接口这个阻塞队列了,他的两个实现类是ArrayBlockingQueue和Linked Blocking Queue。其中有两个非常有趣的方法,put()和take()要记住。
以上就是我这周的学习所有的知识点了,希望自己静下心来,再接再厉。疫情快快过去吧!!!
中国必胜!!!!

你可能感兴趣的:(笔记,java)