我把所有Java相干的面试题和答案都整顿成了PDF,并且带书签目录,浏览起来十分不便

面试题及答案PDF下载:https://www.hicxy.com/2645.html

面试题及答案PDF下载:https://www.hicxy.com/2645.html

面试题及答案PDF下载:https://www.hicxy.com/2645.html

1. 多线程和单线程的区别和分割?

1、 在单核 CPU 中,将 CPU 分为很小的工夫片,在每一时刻只能有一个线程在执行,是一种宏观上轮流占用 CPU 的机制。

2、 多线程会存在线程上下文切换,会导致程序执行速度变慢,即采纳一个领有两个线程的过程执行所须要的工夫比一个线程的过程执行两次所须要的工夫要多一些。

论断:即采纳多线程不会进步程序的执行速度,反而会升高速度,然而对于用户来说,能够缩小用户的响应工夫。

2. 什么是多线程中的上下文切换?

多线程会独特应用一组计算机上的CPU,而线程数大于给程序调配的CPU数量时,为了让各个线程都有执行的机会,就须要轮转应用CPU。不同的线程切换应用CPU产生的切换数据等就是上下文切换。

3. join办法的作用?

Thread类中的join办法的次要作用就是同步,它能够使得线程之间的并行执行变为串行执行。当咱们调用某个线程的这个办法时,这个办法会挂起调用线程,直到被调用线程完结执行,调用线程才会继续执行。

4. 创立线程池参数有哪些,作用?

public ThreadPoolExecutor(   int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue<Runnable> workQueue,                              ThreadFactory threadFactory,                              RejectedExecutionHandler handler)

1.corePoolSize:外围线程池大小,当提交一个工作时,线程池会创立一个线程来执行工作,即便其余闲暇的外围线程可能执行新工作也会创立,期待须要执行的工作数大于线程外围大小就不会持续创立。

2.maximumPoolSize:线程池最大数,容许创立的最大线程数,如果队列满了,并且曾经创立的线程数小于最大线程数,则会创立新的线程执行工作。如果是无界队列,这个参数根本没用。

3.keepAliveTime: 线程放弃流动工夫,线程池工作线程闲暇后,放弃存活的工夫,所以如果工作很多,并且每个工作执行工夫较短,能够调大工夫,进步线程利用率。

4.unit: 线程放弃流动工夫单位,天(DAYS)、小时(HOURS)、分钟(MINUTES、毫秒MILLISECONDS)、微秒(MICROSECONDS)、纳秒(NANOSECONDS)

5.workQueue: 工作队列,保留期待执行的工作的阻塞队列。

一般来说能够抉择如下阻塞队列:

ArrayBlockingQueue:基于数组的有界阻塞队列。

LinkedBlockingQueue:基于链表的阻塞队列。

SynchronizedQueue:一个不存储元素的阻塞队列。

PriorityBlockingQueue:一个具备优先级的阻塞队列。

6.threadFactory:设置创立线程的工厂,能够通过线程工厂给每个创立进去的线程设置更有意义的名字。

7.handler: 饱和策略也叫回绝策略。当队列和线程池都满了,即达到饱和状态。所以须要采取策略来解决新的工作。默认策略是AbortPolicy。

AbortPolicy:间接抛出异样。CallerRunsPolicy: 调用者所在的线程来运行工作。DiscardOldestPolicy:抛弃队列里最近的一个工作,并执行当前任务。DiscardPolicy:不解决,间接丢掉。当然能够依据本人的利用场景,实现RejectedExecutionHandler接口自定义策略。

5. 举例说明同步和异步。

如果零碎中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据当前可能被另一个线程读到,或者正在读的数据可能曾经被另一个线程写过了,那么这些数据就必须进行同步存取(数据库操作中的排他锁就是最好的例子)。当应用程序在对象上调用了一个须要破费很长时间来执行的办法,并且不心愿让程序期待办法的返回时,就应该应用异步编程,在很多状况下采纳异步路径往往更有效率。事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。

前面的问题,大家能够先本人独立思考一下。

另外我把所有Java相干的面试题和答案都整理出来了,给大家参考一下

面试题及答案PDF下载:https://www.hicxy.com/2645.html

面试题及答案PDF下载:https://www.hicxy.com/2645.html

面试题及答案PDF下载:https://www.hicxy.com/2645.html

6. 如何创立线程池

7. 为什么wait()办法和notify()/notifyAll()办法要在同步块中被调用

8. 为什么wait和notify办法要在同步块中调用?

9. join办法实现原理

10. notify()和notifyAll()有什么区别?

11. 为什么wait, notify 和 notifyAll这些办法不在thread类外面?

12. # 2、同步静态方法

13. 当一个线程进入某个对象的一个synchronized的实例办法后,其它线程是否可进入此对象的其它办法?

14. 你对线程优先级的了解是什么?

15. 敞开线程池

16. 线程同步和互斥有几种实现办法,都是什么?

17. 什么是Daemon线程?它有什么意义?

18. synchronized锁的是什么?

19. 在Java中CycliBarriar和CountdownLatch有什么区别?

20. wait 和 sleep 办法的不同?

21. 为什么Thread类的sleep()和yield ()办法是动态的?

22. Java中用到的线程调度算法是什么?

23. 当初有 T1、T2、T3 三个线程,你怎么保障 T2 在 T1 执行完后执行,T3 在 T2 执行完后执 行?

24. 在Java中Executor、ExecutorService、Executors的区别?

25. 乐观锁和乐观锁的了解及如何实现,有哪些实现形式?

26. 如何进行一个正在运行的线程

27. ThreadLocal是什么

28. 什么是Java内存模型

29. 什么是不可变对象,它对写并发利用有什么帮忙?

30. 什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?

31. ConcurrentHashMap的并发度是什么

32. 说说本人是怎么应用 synchronized 关键字,在我的项目中用到了吗synchronized关键字最次要的三种应用形式:

33. Java中Semaphore是什么?

34. 如何在两个线程间共享数据?

35. 什么是ThreadLocal变量?

36. 怎么检测一个线程是否领有锁?

37. 你如何在Java中获取线程堆栈?

38. 如何正当的设置线程池

39. Synchronized 有几种用法?

40. sleep办法和wait办法有什么区别

41. 什么是线程池?为什么要应用它?

42. 一个线程运行时产生异样会怎么?

43. 如何管制某个办法容许并发拜访线程的大小?

44. 用户线程和守护线程有什么区别?

45. 线程中断是否能间接调用stop,为什么?

46. Runnable接口和Callable接口的区别

47. ThreadLocal有什么用

48. Java中堆和栈有什么不同?

49. Java中如何获取到线程dump文件

50. 什么是线程调度器(Thread Scheduler)和工夫分片(Time Slicing)?

51. 不应用stop进行线程?

52. SynchronizedMap和ConcurrentHashMap有什么区别?

53. 高并发、工作执行工夫短的业务怎么应用线程池?并发不高、工作执行工夫长的业务怎么应用线程池?并发高、业务执行工夫长的业务怎么应用线程池?

54. 你如何确保main()办法所在的线程是Java 程序最初完结的线程?

55. 同步办法和同步块,哪个是更好的抉择?

56. 线程池作用

57. CopyOnWriteArrayList能够用于什么利用场景?

58. 如何创立守护线程?以及在什么场合来应用它?

59. 如何在两个线程之间共享数据

60. synchronized和ReentrantLock的区别

61. Thread.sleep(0)的作用是什么

62. 线程的sleep()办法和yield()办法有什么区别?

63. 什么是阻塞队列?阻塞队列的实现原理是什么?如何应用阻塞队列来实现生产者-消费者模型?

64. 在java中守护线程和本地线程区别?

65. 什么是Executors框架?

66. 什么是Java Timer 类?如何创立一个有特定工夫距离的工作?

67. 如何让正在运行的线程暂停一段时间?

68. 什么是自旋

69. Java中你怎么唤醒一个阻塞的线程?

70. Java中的死锁

71. start()办法和run()办法的区别

72. join与start调用程序问题

73. Java Concurrency API中的Lock接口(Lock interface)是什么?比照同步它有什么劣势?

74. 什么是线程池? 为什么要应用它?

75. 线程的创立形式

76. 说一说本人对于 synchronized 关键字的理解

77. 为什么应用Executor框架?

78. 线程的状态

79. 简述线程、程序、过程的基本概念。以及他们之间关系是什么?

80. # 5、同步对象实例

81. # 1、同步一般办法

82. Executor框架的次要成员

83. synchronized包含哪两个jvm重要的指令?

84. Thread类中的yield办法有什么作用?

85. 线程类的构造方法、动态块是被哪个线程调用的

86. 什么是 FutureTask

87. volatile关键字的作用

88. 什么是线程平安?

89. volatile 变量和 atomic 变量有什么不同?

90. 为什么wait(), notify()和notifyAll ()必须在同步办法或者同步块中被调用?

91. 如何确保线程平安?

92. 什么是并发容器的实现?

93. # 3、同步类

94. 如何防止死锁和检测

95. 为什么应用Executor框架比应用利用创立和治理线程好?

96. wait()办法和notify()/notifyAll()办法在放弃对象监视器时有什么区别

97. 讲一下 synchronized 关键字的底层原理

98. Java中interrupted 和 isInterrupted办法的区别?

99. 什么是可重入锁(ReentrantLock)?

100. 线程池工作流程

101. Java中活锁和死锁有什么区别?

102. 线程的状态转换?

103.

104. 什么是 Callable 和 Future?

105. 线程有哪些根本状态?

106. 为什么咱们调用start()办法时会执行run()办法,为什么咱们不能间接调用run()办法?

107. 请说出与线程同步以及线程调度相干的办法。

108. 什么是阻塞(Blocking)和非阻塞(Non-Blocking)?

109. 什么是阻塞式办法?

110. Java中的同步汇合与并发汇合有什么区别?

111. 什么是竞态条件?你怎么发现和解决竞争?

112. 罕用的线程池模式以及不同线程池的应用场景?

113. 死锁与活锁的区别,死锁与饥饿的区别?

114. Java中原子操作更新字段类,Atomic包提供了哪几个类?

115. 向线程池提交工作

116. join办法传参和不传参的区别?

117. # 4、同步this实例

118. 在线程中你怎么解决不可管制异样?

119. 在多线程中,什么是上下文切换(context-switching)?

120. 多线程有什么用?

121. 同步办法和同步块,哪个是更好的抉择

122. 为什么代码会重排序?

123. Java中interrupted 和isInterruptedd办法的区别?

124. 什么是线程平安

125. 并行和并发有什么区别?

126. 自旋锁的优缺点?

127. Java线程池中submit() 和 execute()办法有什么区别?

128. 一个线程如果呈现了运行时异样会怎么样

129. volatile 是什么?能够保障有序性吗?

130. ThreadLocal原理,应用留神点,利用场景有哪些?

131. 线程平安的级别

132. Java中notify 和 notifyAll有什么区别?