关于线程相关的一些理解和常见面试题
2017-11-27 14:43
489 查看
网上一张关于线程的图,我认为很方便理解线程:
常见面试题:
一、wait和sleep的区别?
答:1:wait是object类的方法,sleep是Thread类方法。
2:sleep不会释放当前线程的锁,wait会释放当前线程的锁。所以 wait一般用在同步方法中或者同步块中,sleep可以用在各种地方。
3:wait需要notify或者notifyAll方法才能唤醒,sleep会在睡眠时间过后醒来,或者调用interrupt()强行打断。Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”
共同点:都可以暂停线程,让出cup资源。
二、synchronized和lock的区别?
答:
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c) tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
常见面试题:
一、wait和sleep的区别?
答:1:wait是object类的方法,sleep是Thread类方法。
2:sleep不会释放当前线程的锁,wait会释放当前线程的锁。所以 wait一般用在同步方法中或者同步块中,sleep可以用在各种地方。
3:wait需要notify或者notifyAll方法才能唤醒,sleep会在睡眠时间过后醒来,或者调用interrupt()强行打断。Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”
共同点:都可以暂停线程,让出cup资源。
二、synchronized和lock的区别?
答:
synchronized | Lock | |
存在层次 | Java的关键字,在jvm层面上 | 是一个类 |
锁的释放 | 1、以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放锁 | 在finally中必须释放锁,不然容易造成线程死锁 |
锁的获取 | 假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待 | 分情况而定,Lock有多个锁获取的方式,具体下面会说道,大致就是可以尝试获得锁,线程可以不用一直等待 |
锁状态 | 无法判断 | 可以判断 |
锁类型 | 可重入不可中断非公平 | 可重入可中断可公平(两者皆可) |
性能 | 少量同步 | 大量同步 |
三、lock和ReentrantLock
lock是一个接口类,ReentrantLock是lock接口的一个实现类。ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c) tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
相关文章推荐
- 【日积月累】关于进程 线程和一些常见的多线程概念
- 关于线程方法的一些个人理解
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- Java 关于线程的一些面试题
- 关于链表面试题的一些理解
- 关于阶乘的两个常见算法及一个相关面试题
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- 关于java线程的一些理解
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- 关于相关系数的一些理解误区
- 常见的线程安全相关的面试题
- 线程相关代码分析->常见面试题(一、Thead类)
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- java中关于线程的常见面试题
- 关于线程ID的一些理解
- 关于阶乘的两个常见算法及一个相关面试题
- 关于阶乘的两个常见算法及一个相关面试题【转】
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- 关于一些线程锁相关的心能对比
- 关于阶乘的两个常见算法及一个相关面试题