java面试
Posted 泡椒炒甜瓜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试相关的知识,希望对你有一定的参考价值。
1.java多线程
1.1--java多线程通信?
多线程并发编程时,难免会遇到线程间的通信问题。线程通信方式的思想大体上来说可以分为两种:共享和传递。
共享的实现方式可以是共享变量、共享文件、数据库、网络等。传递的实现方式可以是消息队列、生产者-消费者模型等。
(1)共享变量:
使用volatile 关键字定义共享变量 private static volatile Boolean odd = true。
多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。
volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。
(2)使用Object类的wait() 和 notify() 方法:
wait和 notify必须配合synchronized使用,wait方法释放锁,notify方法不释放锁。
(3)基本LockSupport实现线程间的阻塞和唤醒:
LockSupport.park(); 阻塞
LockSupport.unpark(threadB); 唤醒
1.2--java多线程实现方式?
(1)继承Thread类创建线程。
(2)实现Runnable接口创建线程。 多,多实现单继承。
(3)java的Executors线程池。减少对象创建, 提供定时执行、定期执行、单线程、并发数控制等功能。
1.4--java什么是线程池?
创建线程需要花费资源和时间,如果等任务来创建线程那么响应时间就变长。
在程序启动时创建线程来响应处理就是线程池。
1.5--java多线程start()与run()方法区别?
start():Thread类start()来启动一个线程,这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行。
run()称为线程体,它包含了要执行的这个线程的内容。
run(): run()方法当作普通方法的方式调用,程序还是要顺序执行。没有达到多线程目的。
1.6--java多线程中wait()与sleep()区别?
(1)wait是Object方法,sleep是线程方法。
(2)wait会释放锁,sleep不释放锁。
(3)wait需要依赖synchronized关键字,sleep方法不依赖于同步器synchronized。
2.java基础
1.1--java多态?
不同类的对象对同一消息作出不同的响应就叫做多态。
多态存在的三个条件:
(1)有继承关系。
(2)子类重写父类方法。
(3)父类引用指向子类对象,父类调用方法会调用子类重写后方法。FU fu=new ZI();
1.2--java中final关键字?
(1)final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
(2)final方法不能被子类的方法重写,但可以被继承。
(3)final类不能被继承,没有子类,final类中的方法默认是final的。
(4)final不能用于修饰构造方法。
1.3--java中static关键字?
(1)静态变量。类加载只为分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问。
(2)静态方法。静态方法可以直接通过类名调用。静态方法不能访问非静态方法。
(3)static代码块。类加载的时候就会依次执行一次静态代码块。
以上是关于java面试的主要内容,如果未能解决你的问题,请参考以下文章