1.认识线程和进程
进程:一个执行的程序,允许你的计算机同时运行两个或更多的程序。比如支持你在运用文本编辑器的同时可以运行java编译器
线程:一个程序可以同时执行两个或者多个任务的功能。比如文本编辑器可以在打印的同时去格式化文本
2.线程优先级
线程的优先级是用来决定何时从一个运行的线程切换到另一个线程,这叫上下文转换
发生的规则:
1.主动放弃当前线程,最高优先级的线程被执行
2.高优先级线程可以抢占,只要高优先级线程要执行,就执行,这叫有优先权的多任务处理
优先级的设置范围:1 - 10。要返回一个线程的默认优先级,指定NORM_PRIORITY,通常为5,这些优先级都被定义为final型变量。
3.线程同步:管程
一旦一个线程进入了同步方法,那么其它线程则不能调用相同对象的同步方法
1.使用同步方法
使用synchronized关键字修饰的方法为同步方法
2.使用同步语句
不在方法前加入synchronized关键字修饰时,所使用的方法
4.管理线程的方法
5.主线程
Java程序一启动,就有一个线程,就是主程序
重要性:
1.它是产生其它子线程的线程
2.它必须最后完成执行,因为它执行各种关闭
可以通过Thread.currentThread()获取当前线程
显示顺序为 线程名称,优先级,线程组
6.创建线程
Java有两种方式创建线程
1.实现Runnable接口
2.继承Thread类
选择合适的方法,如果你不重载Thread类其它方法时,最好用实现Runnable接口
7.join
用于线程结束,当子线程结束之后,才会执行主程序后面的代码
8.volatile
用来确保running值在循环里每次都能得到验证,如果不用的话,Java可以自由的优化循环,running值会被存在CPU的一个寄存器中,每次重复不一定需要复检。
9.线程间通信
Java通过wait(),notify(),notifyAll()方法实现线程间通信。这些方法在对象中都是用final方法实现的,所有类都包含它们。仅在synchronized方法中才能被调用
10.死锁
有两个线程,一个线程进入a的管程,一个线程进入b的管程,如果第一个线程试图调用b的同步方法,那么就会被锁定,线程会一直处理等待。