美文网首页
线程相关

线程相关

作者: JasonHwang | 来源:发表于2020-04-10 14:02 被阅读0次

    1、线程状态

    NEW 新建状态,线程创建且没有执行start方法时的状态

    RUNNABLE 可运行状态,线程已经启动,但是等待相应的资源(比如IO或者时间片切换)才能开始执行,在任何给定时刻,一个可运行的线程可能正在运行也可能没有运行

    BLOCKED 阻塞状态,当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有, 则该线程进人阻塞状态,例如,当遇到synchronized或者lock且没有取得相应的锁,就会进入这个状态

    WAITING 等待状态,当调用Object.wait或者Thread.join()且没有设置时间,在或者LockSupport.park时,都会进入等待状态。

    TIMED_WAITING 计时等待,当调用Thread.sleep()或者Object.wait(xx)或者Thread.join(xx)或者LockSupport.parkNanos或者LockSupport.partUntil时,进入该状态

    TERMINATED 终止状态,线程中断或者运行结束的状态

    线程状态转变

    2、sleep和wait方法的区别

    slepp是Thread的静态方法用于暂停当前线程,必须有超时时间参数,超时时间一过线程会启动,不涉及线程间通讯,不释放对象锁,wait是Object方法,会释放对象锁,只能在同步代码中使用,只有其他线程调用notify或者notifyall通知当前线程时才能唤醒,也可以设定超时时间唤醒。

    3、如何终止线程

    1)设置标记跳出循环,正常跑完run方法

    2)使用interrupte()方法,调用该方法后只是标记状态为true,需要处理,如果程序处在阻塞状态会抛出InterruptedException异常,在异常中处理退出线程

    5、公平锁与非公平锁,synchronied是那种锁

    两种锁都维护了一个链表用以保存的等待获取锁资源的线程

    公平锁:在队列中依次取出线程,获取锁资源,所有线程都有机会

    非公平锁:进入队列之前先竞争锁资源,锁被其他线程占有则进入队列排队,没有被占用则占有锁资源

    synchronied是非公平锁

    相关文章

      网友评论

          本文标题:线程相关

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