面试(5)
线程中的sleep()和wait方法的区别是什么?
1、来自的类不同(重要)
-
sleep()方法是线程类(Thread)的方法;
-
wait()方法是Object类里的方法;
2、捕获异常不同
-
sleep()方法必须捕获异常
-
wait()方法不需要捕获异常
3、使用范围不同
-
sleep()方法可以在任何地方使用
-
wait()方法只能在同步控制方法或者同步控制块里面使用
4、是否释放锁不同(重要)
-
调用sleep()方法的时候,不会释放对象锁,等待阻塞的时间到了线程自动恢复运行状态
-
调用wait()方法的时候,会释放了对象锁(使得其他线程可以使用同步控制块或者方法 ),通过调用notify()唤醒线程才能恢复到运行状态
注:1、每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。
2、sleep不出让系统资源;wait是进入线程等待池等待,让出系统资源,其他线程可以占用CPU。一般wait不会 加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤 醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
3、Object类常用的方法有哪些?
ToString()、equals、wait()、notify()、hashcode()
java中如何创建线程池?线程池的作用是什么?
1、如何创建线程池:(说出一两个即可)
-
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
-
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
-
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(20);
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
2、线程池作用(好处):
管理线程和线程复用,减少因频繁创建和销毁线程所消耗的内存,从而实现提高程序执行效率。
数据库配置文件常用的配置参数有哪些?DBCP是什么?为什么要用BCP?
1、数据库配置文件常用的配置参数:
Username、 password、 url、 driver 、initSize、 MaxSize等
2、DBCP:
-
DBCP:数据库连接池,是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
-
DBCP是Java开源连接池中最常用的一种,它一般应用在数据库使用非常频繁的系统中,可以处理数据库连接的大量请求,是做大型站点的首选数据库配置。
3、使用DBCP好处:
DBCP用来管理连接和复用连接,减少因频繁创建和销毁连接对象所消耗的内存,最终达到提高程序的执行效率。
数据库中对重复的数据进行去重,如何实现?
使用distinct关键字实现去重操作
mysql中如何实现分页查询
使用limit关键字:limit?,?
第一个参数:跳过多少条(即偏移量),第二个参数:每页显示的数据
例如:一页10条数据,要查询第三页的数据?
limit20,10
如何优化数据库的查询效率?
--适当添加索引(索引的作用就是提高查询效率的)
--尽量使用主键查询(最好减少外键关联查询)
--优化sql语句
--使用redis缓存数据库(优点:读写效率10万次/秒 )
Redis使用key – value存储数据 非关系型数据库