← 返回目录

33、start 与 run 区别

第 41 / 222 卷

33、start 与 run 区别

  1. 方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了运行状态,开始运行 run 函数当中的代码。 Run 方法运行

结束,此线程终止。然后 CPU 再调度其它线程。

34、JAVA 后台线程

  1. 定义:守护线程--也称“服务线程”,他是后台线程,它有一个特性,即为用户线程提供公共服务,在没有用户线程可服务时会自动离

开。

  1. 优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。
  2. 设置:通过 setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程对象创建之前用线程对象的

setDaemon 方法。

  1. 在 Daemon 线程中产生的新线程也是 Daemon 的。
  2. 线程则是 JVM 级别的,以 Tomcat 为例,如果你在 Web 应用中启动一个线程,这个线程的

生命周期并不会和 Web 应用程序保持同步。也就是说,即使你停止了 Web 应用,这个线程依旧是活跃的。

  1. example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,

程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是 JVM 上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统

中的可回收资源。

  1. 生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周

期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。当 JVM 中所有的线程都是守护线程的时候, JVM 就可以退

出了;如果还有一个或以上的非守护线程则 JVM 不会退出

35、什么是乐观锁

乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样

则更新),如果失败则要重复读-比较-写的操作。

java 中的乐观锁基本都是通过 CAS 操作实现的, CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

36、什么是悲观锁

悲观锁是就是悲观思想,即认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人会修改,所以每次在读写数据的时候都会上锁,这样别人想读写这个数据就会 block 直到拿到锁。java中的悲观锁就是Synchronized,AQS框架下的锁则是先尝试cas乐观锁去获取锁,

获取不到,才会转换为悲观锁,如 RetreenLock。

37、什么是自旋锁

自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。

线程自旋是需要消耗 cup 的,说白了就是让 cup 在做无用功,如果一直获取不到锁,那线程也不能一直占用 cup 自旋做无用功,所以需要设定一个自旋等待的最大时间。

如果持有锁的线程执行的时间超过自旋等待的最大时间扔没有释放锁,就会导致其它争用锁的线程在最大等待时间内还是获取不到锁,这时争用线程会停止自旋进入阻塞状态。

自旋锁的优缺点自旋锁尽可能的减少线程的阻塞,这对于锁的竞争不激烈,且占用锁时间非常短的代码块来说性能能大幅度的提升,因为自旋的消耗会小于

线程阻塞挂起再唤醒的操作的消耗,这些操作会导致线程发生两次上下文切换!

但是如果锁的竞争激烈,或者持有锁的线程需要长时间占用锁执行同步块,这时候就不适合使用自旋锁了,因为自旋锁在获取锁前一直都是占用 cpu 做无用功,占着 XX 不 XX,同时有大量线程在竞争一个锁,会导致获取锁的时间很长,线程自旋的消耗大于线程阻塞挂起操作的

消耗,其它需要 cup 的线程又不能获取到 cpu,造成 cpu 的浪费。所以这种情况下我们要关闭自旋锁;

自旋锁时间阈值(1.6 引入了适应性自旋锁)

自旋锁的目的是为了占着 CPU 的资源不释放,等到获取到锁立即进行处理。但是如何去选择自旋的执行时间呢?如果自旋执行时间太长,会有大量的线程处于自旋状态占用 CPU 资源,进而会影响整体系统的性能。因此自旋的周期选的额外重要!

JVM 对于自旋周期的选择, jdk1.5 这个限度是一定的写死的,在 1.6 引入了适应性自旋锁,适应性自旋锁意味着自旋的时间不在是固定的了,而是由前一次在同一个锁上的自旋时间以及锁的拥有者的状态来决定,基本认为一个线程上下文切换的时间是最佳的一个时间,同时

JVM 还针对当前 CPU 的负荷情况做了较多的优化,如果平均负载小于 CPUs 则一直自旋,如果有超过(CPUs/2)个线程正在自旋,则后来线程直接阻塞,如果正在自旋的线程发现 Owner 发生了变化则延迟自旋时间(自旋计数)或进入阻塞,如果 CPU 处于节电模式则停止自

旋,自旋时间的最坏情况是 CPU的存储延迟(CPU A 存储了一个数据,到 CPU B 得知这个数据直接的时间差),自旋时会适当放弃线程

图 42-1
图 42-1
全站分卷索引 · 222 卷
  1. 1JavaOOP面试题
  2. 27、Java的数据结构有那些?
  3. 314、Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型
  4. 420、访问修饰符 public,private,protected,以及不写(默认) 时的区别?
  5. 525、equals与==的区别
  6. 641、Object类常用方法有那些?
  7. 747、构造方法能不能显式调用?
  8. 854、String str=”aaa”,与String str=new String(“aaa”)一样吗?
  9. 963、Hashcode的作用
  10. 1066、有没有可能两个不相等的对象有相同的hashcode
  11. 1170、final、finalize()、finally
  12. 1278、什么是成员内部类
  13. 1385、排序都有哪几种方法?请列举
  14. 1495、String 和 StringBuilder、StringBuffer 的区别?
  15. 15100、Java 中会存在内存泄漏吗,请简单描述。
  16. 16101、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被 synchronized修饰?
  17. 17104、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?
  18. 18107、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
  19. 193、Collection包结构,与Collections的区别
  20. 208、集合类存放于 Java.util 包中, 主要有几 种接口
  21. 2114、HashSet( Hash 表)
  22. 2216、说说LinkHashSet( HashSet+LinkedHashMap)
  23. 2319、HashTable(线程安全)
  24. 2421、LinkHashMap(记录插入顺序)
  25. 253、如何自定义一个异常
  26. 266、Thow与thorws区别
  27. 273、常用io类有那些
  28. 2810、JAVA NIO
  29. 29Java反射面试题
  30. 308、Java 反射 API
  31. 31Java序列化面试题
  32. 327、序列化 ID
  33. 332、注解是什么?
  34. 343、实现 Runnable 接口。
  35. 357、如何停止一个正在运行的线程
  36. 368、notify()和notifyAll()有什么区别?
  37. 3711、Thread 类中的start() 和 run() 方法有什么区别?
  38. 3817、SynchronizedMap和ConcurrentHashMap有什么区别?
  39. 3922、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗synchronized关键字最主要的三种使用方式
  40. 4030、阻塞状态(BLOCKED)
  41. 4133、start 与 run 区别
  42. 4238、Synchronized 同步锁
  43. 4340、Condition 类和 Object 类锁方法区别区别
  44. 4443、Semaphore 与 ReentrantLock 区别
  45. 4549、轻量级锁
  46. 4657、线程中断(interrupt)
  47. 4764、寄存器
  48. 4874、拒绝策略
  49. 4977、Java 中的阻塞队列
  50. 5078、ArrayBlockingQueue(公平、非公平)
  51. 5185、在 java 中守护线程和本地线程区别
  52. 5292、在 Java 中 Executor 和 Executors 的区别?
  53. 5397、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
  54. 54103、为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
  55. 55JVM面试题
  56. 5610、解释 Java 堆空间及 GC?
  57. 5712、程序计数器(线程私有)
  58. 5818、描述一下 JVM 加载 class 文件的原理机制
  59. 5923、新生代
  60. 6029、标记清除算法( Mark-Sweep)
  61. 6132、分代收集算法
  62. 6238、JAVA虚引用
  63. 6346、Parallel Scavenge 收集器(多线程复制算法、高效)
  64. 6459、CMS 收集器(多线程标记清除算法)
  65. 6562、类加载器
  66. 6663、双亲委派
  67. 6767、JVM内存模型
  68. 6876、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
  69. 6979、Java对象创建过程
  70. 7086、Minor GC与Full GC分别在什么时候发生?
  71. 712、TokuDB( Fractal Tree-节点带数据)
  72. 726、InnoDB与MyISAM的区别
  73. 7311、第二范式(2nd NF- 每个表只描述一件事情)
  74. 7415、简单说一说drop、delete与truncate的区别
  75. 7520、大表如何优化?
  76. 7622、分库分表之后,id 主键如何处理
  77. 7729、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
  78. 7838、列对比运算符是什么?
  79. 7948、MySQL 支持事务吗?
  80. 8055、什么情况下设置了索引但无法使用
  81. 8161、为表中得字段选择合适得数据类型
  82. 8267、完整性约束包括哪些?
  83. 8375、主键、外键和索引的区别?
  84. 8483、什么是页级锁
  85. 856、Memcache 与 Redis 的区别都有哪些?
  86. 8611、热点数据和冷数据是什么
  87. 8715、Redis 常见性能问题和解决方案?
  88. 8819、Redis 常见性能问题和解决方案:
  89. 8926、Redis 集群方案什么情况下会导致整个集群不可用?
  90. 9040、Redis 如何做内存优化?
  91. 9147、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
  92. 922、memcached 服务在企业集群架构中有哪些应用场景?
  93. 935、memcached 是怎么工作的?
  94. 9412、如何将 memcached 中 item 批量导入导出?
  95. 9520、什么是二进制协议,我该关注吗?
  96. 96MongoDB面试题
  97. 974、NoSQL数据库有哪些类型?
  98. 9815、如何执行事务/加锁?
  99. 9929、如果我在使用复制技术(replication),可以一部分使用日志(journaling)而其他部分则不使用吗?
  100. 10042、分析器在MongoDB中的作用是什么?
  101. 10156、MongoDB的优势有哪些
  102. 10267、MongoDB中的命名空间是什么意思?
  103. 10375、在MongoDB中如何除去一个数据库Collection Methods24.在MongoDB中如何除去一个数据库
  104. 10485、如何在集合中插入一个文档
  105. 10593、在MongoDB中如何排序
  106. 1065、Spring Framework 中有多少个模块,它们分别是什么?
  107. 1078、使用 Spring 有哪些方式?
  108. 10816、Spring IoC 的实现机制。
  109. 10919、spring 支持集中 bean scope?
  110. 11023、自动装配有哪些方式?
  111. 11130、@Qualifier 注解有什么用?
  112. 11234、spring JDBC API 中存在哪些类?
  113. 11340、什么是切点(JoinPoint)
  114. 11446、如何理解 Spring 中的代理?
  115. 11550、介绍一下 WebApplicationContext
  116. 11655、Spring中Autowired和Resource关键字的区别
  117. 11757、讲一下什么是Spring
  118. 11859、springMVC是什么
  119. 11965、解释Spring支持的几种bean的作用域。
  120. 12071、解释 AOP 模块
  121. 12181、有哪些不同类型的 IOC(依赖注入)方式?
  122. 12291、什么是 Spring 的内部 bean?
  123. 123102、@Autowired 注解
  124. 124113、解释 AOP
  125. 125126、什么是 Spring 的 MVC 框架?
  126. 1263、Spring Boot 有哪些优点?
  127. 1277、如何在Spring Boot启动的时候运行一些特定的代码?
  128. 12815、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
  129. 12923、如何实现 Spring Boot 应用程序的安全性?
  130. 13034、什么是 AOP?
  131. 13140、运行 Spring Boot 有哪几种方式?
  132. 13249、如何重新加载Spring Boot上的更改,而无需重新启动服务器?
  133. 13353、Spring Boot 还提供了其它的哪些 Starter Project Options?
  134. 13455、创建一个 Spring Boot Project 的最简单的方法是什么?
  135. 13558、 什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
  136. 13661、什么是 Spring Data REST?
  137. 13765、如何使用 Spring Boot 生成一个 WAR 文件?
  138. 13873、如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
  139. 13976、Spring Boot 配置的默认 H2 数据库的名字是上面?为什么默认的数据库名字是 testdb?
  140. 14081、如何使用配置文件通过 Spring Boot 配置特定环境的配置?
  141. 14183、如何禁用特定的自动配置?
  142. 14287、SpringBoot 中静态首页默认位置可以放在哪里?
  143. 143Spring Cloud面试题
  144. 1447、什么是 Netflix Feign?它的优点是什么?
  145. 1459、什么是微服务
  146. 14611、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
  147. 14714、说说 RPC 的实现原理
  148. 14819、微服务之间是如何独立通讯的?
  149. 14927、springcloud断路器作用?
  150. 15035、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
  151. 1513、使用 rabbitmq 的场景
  152. 15210、使用 RabbitMQ 有什么好处?
  153. 15315、如何保证消息的可靠传输?如果消息丢了怎么办
  154. 15417、如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决
  155. 15520、什么是Publisher ?
  156. 15631、Fanout(广播分发)?
  157. 157Dubbo 面试题
  158. 1585、一般使用什么注册中心?还有别的选择吗?
  159. 15914、Dubbo 集群容错有几种方案?
  160. 16019、Dubbo 配置文件是如何加载到 Spring 中的?
  161. 16124、Dubbo 必须依赖的包有哪些?
  162. 16231、Dubbo是什么?
  163. 16342、Dubbo可以对结果进行缓存吗?
  164. 16430、服务读写推荐的容错策略是怎样的?
  165. 165MyBatis 面试题
  166. 1668、 模糊查询 like 语句该怎么写?
  167. 16713、如何获取自动生成的(主)键值?
  168. 16814、在 mapper 中如何传递多个参数?
  169. 16918、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  170. 17024、什么是 MyBatis 的接口绑定?有哪些实现方式?
  171. 17128、MyBatis实现一对一有几种方式?具体怎么操作的 ?
  172. 1726、四种类型的数据节点 Znode
  173. 17311、ACL 权限控制机制
  174. 17417、zookeeper 是如何保证事务的顺序一致性的?
  175. 17524、Zookeeper 对节点的 watch监听通知是永久的吗?为什么不是永久的?
  176. 17632、分布式通知和协调
  177. 17739、事务编号 Zxid(事务请求计数器+ epoch)
  178. 17846、ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段) )
  179. 1791、栈(stack)
  180. 1805、排序二叉树
  181. 1816、 前缀树
  182. 1827、红黑树
  183. 1838、B-TREE
  184. 1849、位图
  185. 185算法面试题
  186. 1863、假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天(请用代码实现,谢绝调用API方法)
  187. 1875、二分查找
  188. 1888、快速排序算法
  189. 1899、希尔排序算法
  190. 19010、归并排序算法
  191. 19111、桶排序算法
  192. 19213、剪枝算法
  193. 19317、AES
  194. 19419、CRC
  195. 19521、更多算法练习
  196. 1963、elasticsearch 索引数据多了怎么办,如何调优,部署
  197. 1976、详细描述一下 Elasticsearch 搜索的过程?
  198. 1989、Elasticsearch 是如何实现 Master 选举的?
  199. 19913、详细描述一下 Elasticsearch 更新和删除文档的过程。
  200. 20017、对于 GC 方面,在使用 Elasticsearch 时要注意什么?
  201. 20122、介绍一下你们的个性化搜索方案?
  202. 202Kafka 面试题
  203. 2033、数据文件分段 segment(顺序读写、分段命令、二分查找)
  204. 2048、Consumer Group
  205. 20513、讲一下主从同步
  206. 20619、消费者如何不自动提交偏移量,由应用提交?
  207. 207微服务 面试题
  208. 2083、微服务有哪些特点?
  209. 2095、微服务架构如何运作?
  210. 2108、在使用微服务架构时,您面临哪些挑战?
  211. 21113、什么是无所不在的语言?
  212. 21220、Spring Cloud 解决了哪些问题?
  213. 21328、双因素身份验证的凭据类型有哪些?
  214. 21434、什么是端到端微服务测试?
  215. 21540、我们如何进行跨功能测试?
  216. 21646、什么是持续集成(CI)?
  217. 2173、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
  218. 2188、建立软链接(快捷方式),以及硬链接的命令
  219. 21914、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
  220. 22025、怎么查看系统支持的所有信号?
  221. 22134、查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加?
  222. 22241、如果你的助手想要打印出当前的目录栈,你会建议他怎么做?