通常,在第一轮或者电话面试的时候,这条线会问你对“join”法是否熟悉。这是一个简单的多线程问题,并且可以通过join方法实现。
2)Lock接口与Java同步块相比有哪些优点?为了维护其完整性,您需要实现一种高效率的缓存,允许多个用户读取,但是仅允许一个用户写入,那么如何实现?
lock接口在多线程和并发编程中的主要优点在于,它们分别为读和写提供锁,并且可以满足编写高性能数据结构,如ConcurrentHashMap和有条件阻塞。java线程式化的问题越来越多地取决于应聘者的回答。在你去多线程面试前,我强烈建议你仔细阅读Locks,因为目前它有很多用来建立客户端缓存和交易连接空间的电子交易终端。
3)java中wait和sleep方法有什么不同?在电话采访中,常常会被问及的Java线程面试问题。主要区别在于当wait保持锁定时,sleep保持锁定。Wait通常用于线程间的交互,sleep通常用于暂停执行。
4)阻塞队列使用Java实现。这个问题比较难解决,而且会有很大的用处。首先,它能够检测出候选者是否能够实际使用Java线程写入程序;其次,可以检测候选者对并发场景的理解,并根据这些程序提出许多问题。若使用wait和notify方法实现阻塞队列,就可以让他在新的Java5中重新编写并发类。
5)使用Java编写代码,以解决生产者-消费者问题。类似于上述的问题,但是这个问题更为经典,而且面试者有时会提出以下问题。如何处理Java中的生产者——消费者问题,当然有许多解决方案,我分享了一种使用阻塞队列实现的方法。有人甚至会问,哲学家吃饭的问题是如何实现的。
6)用Java编写可能导致死锁的程序,您如何解决?我很喜欢这个Java线程访问的问题,因为即使在编写多线程并发程序时,死锁问题也很常见,但许多侯选者都无法编写deadlockfreecode(没有死锁代码?),它们在挣扎。只需告诉他们,你拥有N个资源和N个线程,而且完成某个动作需要全部资源。在这里,如果n被替换为2,那么数据越大,问题就越复杂。在Java中,避免死锁给我们带来了更多有关死锁的信息。
7)什么是原子运算,什么是Java的原子运算?java线程访问问题很简单,接下来的问题是,您需要同步一个原子动作。
8)volatile关键在Java中扮演什么角色?如何使用它?它与Java中的同步方法有何不同?由于对Java5和Java内存模型进行了修改,基于volatile关键字的线程问题日益普遍。有关volatile变量如何在并发环境中保证可视性的问题应该得到解答。
9)竞争条件是什么?如何发现并解决竞争?这个问题和多线程面试的高级阶段一起出现。大部分面试官都会问你最近遇到的竞争状况,以及你是如何应对的。有一些时候,他们编写简单的代码,然后让您检测代码的竞争状态。请参阅我以前发表的有关Java竞争环境的文章。对我来说,这是一个很好的java线程访谈问题,它可以精确地检测候选者解决竞争条件的经验,orwritingcodewhichisfreeofdataraceoranyotherracecondition。《ConcurrencypracticesinJava》一书。
10)如何使用threaddump?如何分析Threaddump?kill-3在UNIX中可用,然后threaddump将打印日志,而在windows中,您可以使用"CTRL+Break"。这是一次简单而专业的面试问题,但如果他问你是如何分析的,那将会很棘手。
11)为什么当我们调用start方法时执行run方法,为什么不能直接调用run方法?还有一个很经典的java多线程访谈问题。当我开始编写线程程序时,这也让我困惑。这一问题通常会在电话面试或初级Java面试的第一轮中提出。当您调用start方法时,您将创建一个新线程,并在run方法中执行代码,该方法就会得到执行。但如果您直接调用run方法,则不会创建新线程或执行调用线程的代码。要了解更多信息,请阅读我之前所写的“start和run方法的区别”。
12)如何在Java中唤醒阻塞线程?这个问题很难处理线程和阻塞,有许多解决方案。我想,没有一种方式能让线程陷入IO阻塞的境地。由于调用wait.sleep.或join方法造成的阻塞,您可以中断线程并通过抛出InterruptedException将其唤醒。以前写过“Howtodealwithblockingmethodsinjava”,有许多关于处理线程阻塞的信息。
13)在Java中CycliBarriar和CountdownLatch有什么不同?此线程问题主要用于检测您对JDK5中的并发包的了解。两者的区别在于,CyclicBarrier可以重复使用已经过的障碍物,并且CountdownLatch无法再利用。
14)什么是不变的对象?它对写入并发应用有什么帮助?另外一个多线程经典面试问题,与线程无关,但是间接帮助很大。java面试问题可能会变得很复杂,如果他让你写一个不变的对象,或者问你为什么string是不变的。
15)在多线程环境下,通常会出现哪些问题?你们如何解决这个问题?
Memory-interface.竞争条件.死锁.活锁和饥饿状态是经常出现的。困难无止境,如果你犯了错误,就很难发现和调试。多数基于面试,而非实际应用Java线程问题。