1.进程与线程概念
进程:进程是操作系统结构的基础,是一个程序的执行,是一个程序及其数据在处理机上顺序执行时发生的活动,是程序在一个数据集合上运行的过程,她是系统进行资源分 配和调度的独立单位
线程:是进程中的一个子任务
2.多线程的使用
(1)继承Thread (2)实现Runnable接口
因为java中继承是单继承 多实现
3.非线程的安全
原因:因为多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改,值不同步的情况,进而影响程序的执行流程
处理办法:使用synchronized关键字
4.currentThread()方法
返回代码段正在被那个线程调用的信息
5.isAlive()方法
判断当前的线程是否处于活动状态
6.sleep()方法
让当前的正在执行的线程休眠,正在执行的线程是指this.currentThread()返回的线程
7.getId()方法
取得线程的唯一标识
8.停止线程
java 中有三种方法停止线程
(1).使用退出标志,就是线程正常运行完成,也就是run方法完成后线程终止
(2). 使用stop方法强制停止,不推荐,因为stop suspend resume都是过期方法,使用他们可能产生不可预料的结果
(3).使用interrupt方法中断线程
9.interrupt()方法
调用interrupt()方法的使用效果并不像for+break语句那样,马上停止循环,调用interrupt方法仅仅只是在当前线程中打一个停止的标记,并不是真真的停止线程
10.判断线程是否是停止状态
this.interrupted() :测试当前线程是否已经中断 一定要记住是当前线程 然后调用一次,就会清除当前线程中断状况,所以联系调用两次的话 第一次是true 第二次是false
this.isInterrupted():测试线程是否已经中断 测试线程thread是否已经是中断状态,但不清除状态标志
11.异常法 停止线程
在run方法中 判断当前线程是否中断(this.isInterrupted)然后抛出异常 throw new InterruptException() 然后就会跳出线程
12.在沉睡中停止线程
在run方法中 让线程sleep() 在main方法中让此线程interrupt() 然后会在run方法中sleep方法之前的代码执行 然后执行到sleep之后抛出异常
13.暴力停止 stop方法
使用stop方法会出现非线程安全,因为如果强制线程停止,则可能是一些清理性的工作得不到完成,另一个情况就是对锁定的对象进行了“解锁”,导致数据得不到同步的处 理,出现数据不一致的问题
14.使用return 结束线程
配合interrupt使用
run方法中判断是否中断(this.isInterrupted())然后return
15.suspend()方法 和 resume()方法 过时方法 缺点 (独占)
使用不当,极易造成公共同步对象的独占,是其他线程无法访问到公共同步对象
16.suspend()与resume()缺点---不同步
使用suspend()与resume()方法时也容易出现因为 线程的暂停而导致数据不同步的情况
17.yield()方法
总用是放弃当前的cpu资源,将它让给其他的任务去占用cpu执行时间,当放弃的时间不确定,也可能刚刚放弃,立马又获得了cpu时间片
18.线程的优先级
setPriority()方法 线程的优先级分为1~10 jdk中使用3个常量来预留定义优先级
MIN_PRIORITY = 1 NORM_PRIORITY = 5 MAX_PRIORITY = 10
19.线程优先级的继承特性
在java中,线程的优先级具有继承性,比如线程A中启动线程B 则B线程的优先级与A是一样的
20.守护(Daemon)线程
主线程是被守护线程 设置了setDaemon 的线程作为守护线程 然后当主线程运行完毕 则守护线程消失