Java并发编程面试题汇总java
线程面试
线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(好比文件句柄等)也能访问同一个进程所建立的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。算法
每一个程序都至少拥有一个线程-即做为Java虚拟机(JVM)启动参数运行在主类main方法的线程。在Java虚拟机初始化过程当中也可能启动其余的后台线程。这种线程的数目和种类因JVM的实现而异。然而全部用户级线程都是显式被构造并在主线程或者是其余用户线程中被启动。编程
一、在java中守护线程和本地线程区别?安全
二、线程与进程的区别?多线程
三、什么是多线程中的上下文切换?并发
四、死锁与活锁的区别,死锁与饥饿的区别?框架
五、Java中用到的线程调度算法是什么?学习
六、什么是线程组,为何在Java中不推荐使用?atom
七、为何使用Executor框架?
八、在Java中Executor和Executors的区别?
九、如何在Windows和Linux上查找哪一个线程使用的CPU时间最长?
十、什么是原子操做?在Java Concurrency API中有哪些原子类(atomic classes)?
十一、Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优点?
十二、什么是Executors框架?
1三、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
1四、什么是Callable和Future?
1五、什么是FutureTask?使用ExecutorService启动任务。
1六、什么是并发容器的实现?
1七、多线程同步和互斥有几种实现方法,都是什么?
1八、什么是竞争条件?你怎样发现和解决竞争?
附:java并发编程学习导图
须要面试题汇总以及高清脑图(可入圈:830478757,进群便可免费领取)
1九、你将如何使用thread dump?你将如何分析Thread dump?
20、为何咱们调用start()方法时会执行run()方法,为何咱们不能直接调用run()方法?
2一、Java中你怎样唤醒一个阻塞的线程?
2二、在Java中CycliBarriar和CountdownLatch有什么区别?
2三、什么是不可变对象,它对写并发应用有什么帮助?
2四、什么是多线程中的上下文切换?
2五、Java中用到的线程调度算法是什么?
2六、什么是线程组,为何在Java中不推荐使用?
2七、为何使用Executor框架比使用应用建立和管理线程好?
2八、java中有几种方法能够实现一个线程?
2九、如何中止一个正在运行的线程?
30、notify()和notifyAll()有什么区别?
3一、什么是Daemon线程?它有什么意义?
3二、java如何实现多线程之间的通信和协做?
3三、什么是可重入锁(ReentrantLock)?
3四、当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
3五、乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
3六、SynchronizedMap和ConcurrentHashMap有什么区别?
3七、CopyOnWriteArrayList能够用于什么应用场景?
3八、什么叫线程安全?servlet是线程安全吗?
3九、volatile有什么用?可否用一句话说明下volatile的应用场景?
40、为何代码会重排序?
4一、在java中wait和sleep方法的不一样?
4三、一个线程运行时发生异常会怎样?
4四、如何在两个线程间共享数据?
4五、Java中notify 和 notifyAll有什么区别?
4六、为何wait, notify 和 notifyAll这些方法不在thread类里面?
4七、什么是ThreadLocal变量?
4八、Java中interrupted 和 isInterrupted方法的区别?
4九、为何wait和notify方法要在同步块中调用?
50、为何你应该在循环中检查等待条件?
5一、Java中的同步集合与并发集合有什么区别?
5二、什么是线程池? 为何要使用它?
5三、怎么检测一个线程是否拥有锁?
5四、你如何在Java中获取线程堆栈?
5五、JVM中哪一个参数是用来控制线程的栈堆栈小的?
5六、Thread类中的yield方法有什么做用?
5七、Java中ConcurrentHashMap的并发度是什么?
5八、Java中Semaphore是什么?
5九、Java线程池中submit() 和 execute()方法有什么区别?
60、什么是阻塞式方法?
6一、Java中的ReadWriteLock是什么?
6二、volatile 变量和 atomic 变量有什么不一样?
6三、能够直接调用Thread类的run ()方法么?
6四、如何让正在运行的线程暂停一段时间?
6五、你对线程优先级的理解是什么?
6六、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?
6七、你如何确保main()方法所在的线程是Java 程序最后结束的线程?
6八、线程之间是如何通讯的?
6九、为何线程通讯的方法wait(), notify()和notifyAll()被定义在Object 类里?
70、为何wait(), notify()和notifyAll ()必须在同步方法或者同步块中被调用?
7一、为何Thread类的sleep()和yield ()方法是静态的?
7二、如何确保线程安全?
7三、同步方法和同步块,哪一个是更好的选择?
7四、如何建立守护线程?
7五、什么是Java Timer 类?如何建立一个有特定时间间隔的任务?
面试资料: