美文网首页
JAVA多线程基础

JAVA多线程基础

作者: 文信彡 | 来源:发表于2019-01-22 17:06 被阅读0次

    JAVA多线程主要的内容在于 Thread类与Runnable接口

    public void run()方法用于放置线程要运行代码

    1.常用方法

    (1)start() 启动线程

    (2)sleep() 线程休眠,如果有参数,第一个参数为要休眠多少毫秒,第二个参数精确到要休眠到多少纳秒

    (3)join() 没有参数,其他线程需要等待当前线程运行结束才能有机会运行,有参数则是等待多少时间才有机会运行。

    (4)yieid() 使当前线程释放处理器的资源,并重新竞争处理器的资源

    (5)currentThread() 返回当前正在运行的线程引用

    2.详解

    (1)线程的停止方法:

    1.错误的停止方式

    1.stop()方法:

    原因:调用stop方法会导致当前线程戛然而止,线程后续的操作将无法进行,如果是是正在调用循环方法时,也会直接停止。这个方法已经被JAVA官方遗弃。

    2.Interrupt()方法:

    原因:该方法用于中断线程,并返回一个布尔值,在使用该方法中断线程时,如果线程中含有wait,sleep等方法,该方法会清除返回的值,并抛出一个interrupt的异常,在后续使用isiterrupt或者initerrupt方法判断停止线程时,并不能正常的停止线程。

    2.正确的停止方式--使用停止标志:keepRunning

    volatile关键字(可见性的)

    volatile boolean keepRunning=true

    在run方法中使用whlie(keepRunning)进行这样可以让线程在完成所有操作后,设置keepRunning=false就可以正确的停止。

    (2)线程交互:

    关键字:synchronized(同步的)用于放置要加锁的代码块。

    1.线程的同步:线程之间的互相通信。

    Wait Set:Wait Set区域对应着一个锁对象,每个锁对象都有一个Wait Set区域,当锁对象调用了wait方法时,当前线程就会被放入Wait Set区域中,在Wait Set中的线程不会去竞争CPU资源

    wait():使当前线程释放身上的锁,并把当前线程放入Wait Set中

    notify():唤醒在Wait Set中的某个线程

    notifyAll()唤醒在Wait Set中的所有线程

    2.线程加锁,用synchronized关键字对lockObj锁对象(Object类型)加锁,从而使整个代码块加上锁。(lockObj相当于整个代码的线程)

    对线程加锁会有一定的性能开销,所以,为了避免线程再次竞争得到CPU资源而产生加锁的性能开锁,使用while循环阻挡,当条件不满足让线程重新进入等待状态。

    相关文章

      网友评论

          本文标题:JAVA多线程基础

          本文链接:https://www.haomeiwen.com/subject/yskrjqtx.html