通常会在电话面试中经常被问到的Java线程面试问题。最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。
这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。
Collection有一个重要的方法:iterator(),返回一个Iterator(迭代器),用于遍历集合的所有元素。Iterator模式可以把访问逻辑从不同的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。典型的用法如下:不需要维护遍历集合的“指针”,所有的内部状态都由Iter...
不是,Swing不是线程安全的。你不能通过任何线程来更新Swing组件,如JTable、JList或JPanel,事实上,它们只能通过GUI或AWT线程来更新。这就是为什么Swing提供invokeAndWait()和invokeLater()方法来获取其他线程的GUI更新请求。这些方法将更新请求放入AWT的线...
虽然两者都是用来暂停当前运行的线程,但是sleep()实际上只是短暂停顿,因为它不会释放锁,而wait()意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁。
在Linux下,你可以通过命令kill-3PID(Java进程的进程ID)来获取Java应用的dump文件。在Windows下,你可以按下Ctrl+Break来获取。这样JVM就会将线程的dump文件打印到标准输出或错误文件中,它可能打印在控制台或者日志文件中,具体位置依赖应用的配置。如果你使用Tomcat。
Busyspin是一种在不释放CPU的基础上等待事件的技术。它经常用于避免丢失CPU缓存中的数据(如果线程先暂停,之后在其他CPU上运行就会丢失)。所以,如果你的工作要求低延迟,并且你的线程目前没有任何顺序,这样你就可以通过循环检测队列中的新消息来代替调用sleep()或wait()方法。它唯一的好处就是你只需...
Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用Strin...
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表;2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合;3.如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度;4.针对数量大的表进行历史表分离(如交易流水表...
A、缓存如何刷新?1、定时刷新2、主动刷新覆盖,每个缓存框架都有自带的刷新机制,或者说缓存失效机制,就拿Redis和Ehcache举例,他们都有自带的过期机制,另外主动刷新覆盖时,只需获取对应的key进行数据的覆盖即可。B、缓存如何保持同步?这个redis有自带的集群同步机制,即复制功能,具体参考:基于Redi...