1.多线程编程基础整理--经常使用方法

经常使用方法

start()

启动线程。此方法调用标示当前线程处于可执行或当即执行状态(在此状态下isInterrupted()方法或interrupted()返回true),不能确保当前线程能当即执行,处于准备开始运行状态或者运行状态。java

isAlive()方法用来判断当前线程是否为存活状态。存活状态是指当前线程处在已经启动但还未终止状态。线程处在准备开始运行状态和运行状态,则表示为存活状态。测试

interrupt()

中止线程。给当前线程打中止标识,可是执行此方法并不能保证当前线程什么时候中止。this

经过Thread.interrupted()threadobj.isInterrupted()判断终止状态线程

Thread.interrupted()threadobj.isInterrupted()区别

  • Thread.interrupted()code

    测试当前线程是否已经中断,并清除中断状态(即第一次调用已清除了中断状态以后,且第二次调用检验完中断状态前,且当前线程在此中断的状况除外),表现现象即为在执行第一次interrupted()返回的是true,以后第二次调用返回的为false。对象

  • threadobj.isInterruted()继承

    this.isInterrupted()threadObj.isInterrupted() 此方法不会清除中断状态。进程

stop()

强制中止线程执。该方法已经被jdk做废。此方法执行后,当前线程会抛出java.lang.ThreadDeath异常,此为error类型异常,通常不用捕获。资源

此方法可能致使清理工做没法执行以及强制解锁后出现的数据和执行目标数据不一致的状况。同步

经常使用如下方式中止线程:

  • return方式

    经过return方法跳出线程执行。

  • 异常法

    经过抛出java.lang.InterruptedException中断线程。

  • sleep()interrupt()

    先经过休眠线程,再执行中断方法则目标线程会直接抛出java.lang.InterruptedException: sleep interrupted(无论是先休眠再中断仍是先中断再休眠都会抛出此异常信息)。

yield()

释放cpu资源。释放cpu资源来让给其余线程使用。不过可能会在释放完cpu资源后又当即获取cpu资源。

suspend()resume()

暂停/恢复线程执行。该方法已经被JDK做废。

该方法缺点:

  • 独占

    该方法极易形成同步对象的独占致使其余线程都没法访问公共同步对象。

  • 不一样步

    在暂停和恢复的过程当中可能致使目标数据不知足运行逻辑预期

setPriority()

设置线程优先级。现成默认提供1-10个预制优先级,优先级越大则执行时获取cpu资源的机会越大。

若是小于或大于此预制优先级则会抛出java.lang.IllegalArgumentException异常。

优先级的特性:

  • 继承

    线程间具备‘继承’特性。具体表现为若是线程A的优先级为6,则由线程A启动的线程B的优先级也是6。

  • 规则

    在多个不一样优先级的相同线程对象执行的过程当中,优先级高的老是大部分先执行完成,但不表明优先级高的老是先所有执行完成。即优先级大的线程执行所需的时间和抢夺锁成功的频率高于优先级小的线程。 当优先级差距过大时,代码执行的开始顺序和start的顺序无关。

  • 随机

    当优先级差距很近时,执行顺序可能随机出现。如同一个线程对象的2个实例,分别设置优先级为5和6,则执行过程当中的顺序并不明显按照6优先级先执行的顺序出现,具备明显的随机性。

setDeamon()

设置线程为守护线程。JAVA中存在两种线程,一种是用户线程,一种是守护线程。当进程中不存在非守护线程时,守护线程会自动终止。典型的守护线程就是垃圾回收线程。

相关文章
相关标签/搜索