一,简述 wait 和 sleep 有什么区别?
- sleep是线程类(Thread)的方法;wait是Object类的方法
- sleep是使线程休眠,不会释放对象锁;wait是使线程等待,释放锁
- sleep()方法导致了程序暂停(线程进入睡眠状态),但是他的监控状态依然保持着,当指定的时间到了又会自动恢复到 可运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
- wait是让自己暂时等待,放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
- 调用sleep进入阻塞状态;调用wait进入就绪状态
二,请描述 volatile 关键字的作用
- 线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
- 顺序一致性:禁止指令重排序。
三,sleep()方法和wait()方法区别
共同点:都是使线程暂停一段时间的方法。
不同点:
①原理不同-sleep()是属于Thread类中的,而wait()方法,则是属于Object类中的。②锁处理机制不同-sleep()最主要作用使线程暂停执行一段时间,时间一到自动恢复,不涉及线程通讯,因此,调用sleep()方法并不会释放锁。而当调用wait()方法的时候,线程会释放它所占的锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
③使用区域不同-wait()方法必须放在同步代码块或者同步方法中使用,sleep()可以用在任何地方
四,简述线程池有什么优点?
1、重用存在的线程,减少对象创建销毁的开销。
2、可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞
争,避免堵塞。3、提供定时执行、定期执行、单线程、并发数控制等功能。
五、非常重要的面试题:谈谈进程和线程之间的区别![高频]―谈到操作系统,进程线程的概念和区别,就是出场频率最高的问题(没有之一)
1.进程包含线程
2.线程比进程更轻量,创建更快,销毁也更快
3.同一个进程的多个线程之间共用同一份内存/文件资源.进程和进程之间,则是独立的内存/文件资源
4.进程是资源分配的基本单位,线程是调度执行的基本单位
六、工作目录:
1.如果是通过命令行来执行程序,此时当前命令所在的目录就是工作目录~~
2.如果你使用IDEA来执行执行Java程序,这个时候你的工作目录是IDEA打开的项目的目录
3.如果你使用的是Tomcat 来运行一个war包,你的工作目录就是Tomcat的 bin目录~
七、程序和进程的本质区别是:
程序是静态的,进程是动态的。
“静态”意味着程序是永久存在的,“动态”表现为进程是一个暂时的过程,可以创建也可以撤销。在进程的一个生存周期中,具有运行、就绪和等待3种可能的状态。 程序和进程也是紧密相关的:进程由程序、数据和进程控制快(PCB)3部分组成,显然如果没有程序,也就没有进程。