Java-关于Thread

1)进程是受操作系统管理的基本运行单元,线程是进程中独立运行的子任务

2)Thread.start()方法通知线程规划器,告知其该线程已经准备完成,可以调用其run方法,这时就是异步的方法;如果直接调用run,就没有交给线程规划器,就是同步方法。另外,执行start的顺序并不是线程启动的顺序。

3)在jvm中i--有三步操作:1、取出i的值;2、做减法;3、赋予i值

4)isAlived方法是检测线程是否属于活动状态

5)sleep的作用是指定毫秒数内让当前正在执行的线程休眠,正在执行的线程指的是this.currentThread返回的线程

6)getID方法是获取线程的唯一标识

7)Thread.stop停止线程,但是并不是线程安全的(调用Thread.stop时会抛一个ThreadDeath异常,通常不需要处理该异常,强制stop会释放锁(线程处理数据没处理完,处理到一半就释放锁了,线程就退出了,这是数据是不正确的),会对正在处理的同步数据造成破坏,出现不一致结果。)

8)利用Thread.interrupt中止线程是安全的,但interrupt并不是立即停止,而是在当前线程中打一个停止标记

9)this.interrupted判断当前线程是否是中断状态,执行后具有将状态标志清除的功能,也就是说,连续两次执行this.interrupted,第二次得到的结果必定是false;this.isInterrupted判断当前线程是否是中断状态,执行后不具有将状态标志清除的功能

10)停止线程的方法:

  A)线程里是一个for循环,for循环一直判断线程是否interrupted,如果被外部中止了,break结束for循环,然后继续走for后面的语句,然后run方法就结束了;

  B)线程里是一个for循环,for循环一直判断线程是否interrupted,如果被外部中止了,抛出一个异常,catch住,然后就结束run方法了;

  C)线程在sleep的时候,外部执行interrupt方法中止线程,会抛InterruptExpection,可以catch这个异常,然后退出;

  D)暴力停止,Thread.stop;

  E)使用return停止线程

推荐用抛异常的形式结束线程,这样可以保证线程退出这个事件一直传播出去

11)suspend暂停线程,resume恢复线程。suspend和resume如果使用不当,极容易造成线程永远暂停,暂停后,线程的同步锁是无法被释放的

12)yield方法是放弃当前的CPU资源,将它让给其他任务去占用CPU执行时间,但放弃时间不确定,有可能刚刚放弃,马上就获得了CPU时间片

13)在操作系统中,可以给线程确定优先级,优先级较高的线程得到的CPU资源较多,为线程设置优先级,有利于线程规划器确定下一次选择哪个线程来优先执行。setPriorty方法可以设置线程的优先级,在1-10中间选择。线程优先级具有继承特性,例如A线程启动B线程,B线程与A线程的优先级相同。优先级具有规则性,高优先级的线程总是大部分先执行完,但不代表高优先级的线程全部先执行完;优先级具有随机性,优先级较高的线程不见得每次都先执行完

14)守护线程是一种特殊的线程,当进程中不存在非守护线程了,守护线程就退出了。典型的线程是垃圾回收线程,当进程中没有非守护线程(用户线程)时,就没有垃圾回收的意义了,垃圾回收线程就自行销毁了。

 

 

 

posted @ 2018-10-25 09:22  振宇要低调  阅读(534)  评论(0编辑  收藏  举报