Java开发实战学习(二)
(一)中主要记录了Java基础程序设计以及面向对象程序设计,接下来主要是Java 应用程序设计
第九章 多线程
多线程机制可以同时运行多个程序块,使程序运行的效率变得更高
Java在线程的实现方式:(1)继承Thread类(2)实现Runnable接口。
(1)正确地启动进程,是不能直接调用函数,而是调用Thread类中继承而来的start()方法。因为多线程的运行需要依靠操作系统支持
如果一个类通过继承Thread类来实现,那么只能调用一次start()方法,如果调用多次,则会抛出“IllegalThreadStateException”异常。【单继承局限的影响】
(2)Runnable接口的实现也是需要依靠Thread类,在Thread类中提供了public Thread(Runnable target)和public Thread(Runnable target, String name)两个构造方法
Thread类也是Runnable接口的子类,但是在Thread类中并没有完全实现Runnable接口中的函数。
这种操作模式和代理设计类似,Thread和Runnable的子类都实现类Runnable接口,之后Runnable的子类实例放到了Thread类中。如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,就可以方便地实现资源的共享。
实现Runnable接口相对于继承Thread类来说,有如下显著的优势:
(1)适合多个相同程序代码的线程去处理同一资源的情况。
(2)可以避免由于Java的单继承特性带来的局限。
(3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的,建议使用Runnable接口实现多线程。
线程的五种状态:创建、就绪、运行、阻塞、终止
创建 e.g. Thread thread = new Thread();
就绪 e.g. start();
运行 e.g. run();
堵塞 e.g. sleep(); suspend(); wait();
死亡 e.g. stop(); run;
Java 一个JVM至少启动两个线程,一个是main线程,一个是垃圾收集线程。
isAlive() 判断线程是否启动
join() 线程的强制运行
Thread.sleep() 线程休眠
interrupt() 中断线程
setDaemon() 后台线程
setPriority() 设置线程优先级,MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY,并非线程的优先级越高就一定会先执行,哪个线程先执行将由CPU的调度决定。主函数的优先级是中等。
yield() 线程的礼让
使用同步解决问题(1)同步代码块(2)同步方法
synchronized() 同步代码块
多个线程共享同一资源时需要进行同步,以保证资源操作的完整性,但是过多的同步就有可能产生死锁。
线程经典案例---生产者及消费者
泛型
Java常用类库
观察者设计模式:e.g. 众多购房者关注房价变化
Observable类和接口
Java IO
后面的内容感觉不太用得上 粗略自己看看就完事了。