1.重写和重载的区别:
重载是发生在同一个类里面,方法名相同,参数类型和参数个数可以不同。
重写:子类继承父类,方法名,参数类型跟参数个数要相同。
多线程
如何预防死锁:
1.资源有限,多个线程同时需要这个资源
2.循环等待,资源被占用互相在等待对方释放资源
3.线程等待过程中不会释放已占有的资源
4.一个线程已经占有的资源,在释放之前不会被其他的线程抢占。
预防的方法就是把资源预分配。不够的时候就等待。
多线程创建的方式:
1.实现Runnable,无返回值,无法抛出异常
2.实现Callable.有返回值,可以抛出异常
3.继承Thread类创建多线程,继承java.lang.Tread类,重新Thread类的run()方法,调用start()方法开发线程。
4.通过线程池创建线程
线程安全活跃态:死锁,活锁,饥饿
1.线程饥饿:读写锁,读线程优先,会导致写线程阻塞,会造成写线程饥饿。
2.线程活锁:一直在重复做某个操作
3.线程死锁:两个线程的资源相互占用
java中的wait和sleep的区别与联系
1.所属类不一样:sleep来自Thread类,wait来自object类
2.wait是跟锁相关,会释放锁。Sleep是与线程相关,与锁无关只是进入了休眠。
3.sleep必须捕获异常。wait不需要捕获异常
4.联系:两者都会导致阻塞,两者均可被中断唤醒
java线程的生命周期:
1.创建Thread对象,再创建原生的操作系统。线程创建
2.创建完成之后,调用线程的stat()方法等待cpu分配资源阶段。就绪
3.当就绪的线程被调度,进入运行状态,run方法定义了线程的操作和功能。运行
4.运行时因为某些原因导致运行的线程变成了阻塞状态,比如用了sleep和wait方法。线程阻塞
5.执行完run方法之后,把资源释放。销毁
Synchronized和lock区别?
1.sync性能比较差,所以引入了lock
2.sync不方便线程获取锁,只能单个锁获取。lock可以切割出多个条件变量,灵活使用,可以获取多个锁。
3.sync在jvm层面上,lock是jvm的一个接口
4.lock必须在finally中释放锁。sync执行完代码或者有异常就会释放锁。



