学习Java私塾中级课程视频的感受分享 - 多线程
本章概述和学习心得:
本章介绍了Java程序中一个很重要的概念——多线程。线程可以看成一个有自己的程序代码和操作数据组成的虚拟机器(封装体)。一般而言,有两种写线程的方法,即:继承Thread类和实现Runnable接口。一个线程开始后,具有可运行、运行中、等待锁、阻塞、结束这几个不同的状态,程序员可以通过sleep、wait、notify、join和interrupt等方法来控制线程。另外,由于多个线程可以共享相同的数据(临界资源),这会导致数据的不一致性而发生不可预期的错误,Java引入了线程同步的机制。这样,就能使用synchronized来解决临界资源的问题。本章最后,老师演示了一段经典的生产者和消费者的代码,使我们对线程同步有了更进一步的直观理解。
内容提要:
【1】线程的基本概念:
1. 封装体 :虚拟的处理机 + CPU执行的代码 + 代码操作的数据
2. 进程和线程的区别:进程是独立的,而线程是共享的;线程可以看成轻量级的进程
3. 线程的两种写法
【2】线程的状态:
1. Runnable
2. Running
3. Blocke
4. Blocked in wait ( ) pool
5. Blocked in object's lock pool
6. Dead
【3】线程的调度和控制
1. 抢占式调度(不可控):优先级
2. Thread.sleep ( ) : 给优先级较低的线程一个运行的机会
3. yield ( ) : 给相同优先级的线程一个运行的机会
4. isAlive ( )
5. wait ( ) : 当前线程进入监察器对象的wait pool
6. notify( ) / notifyAll( ):唤醒对象的wait pool 中的一个 / 所有等待的线程
7. join ( ) :暂停当前线程,“合并”调用某线程
8. interrupt( ): 发送一个例外,强制唤醒暂停线程
9. 守护线程的概念
【4】线程同步
1. 临界资源(共享资源):多个线程间共享的数据
2. 临界资源问题:线程并发,数据不一致性
3. 解决的办法:从对象中获得互斥锁 (synchronized)
4. 死锁
5. 同步运用的准则:精简、不要阻塞、持有锁的时候不调用其他对象的方法
【5】代码演示:经典的生产者和消费者