线程相关

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是非公平锁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 并发与并行 并行:指两个或多个时间在同一时刻发生(同时发生)并发:值两个或多个时间在同一时间段内发生在操作...
    阿麽阅读 525评论 0 0
  • 线程基本知识 什么是线程安全性?当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么可以认为这个类是线程安...
    Cheava阅读 1,051评论 0 1
  • 线程和进程有什么区别? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个...
    casual_v阅读 91评论 0 0
  • 下面是Java线程相关的热门面试题,你可以用它来好好准备面试。 1) 什么是线程? 线程是操作系统能够进行运算调度...
    冰箱哥哥阅读 530评论 0 2
  • 姹紫嫣红的花火在夜空开遍,顺带赠与大地一片炫彩。村头大红灯笼高挂,映出行人眉梢喜气,搬着自家陈年老板凳,路过...
    梦云归阅读 330评论 0 2