加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

史上最全Java面试题整理(附参考答案)

发布时间:2020-12-24 10:36:47 所属栏目:交互 来源:网络整理
导读:下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1、面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类。 继承:基于基类创建新类。 封装:将数据

}

<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="" width="15" height="15" data-cke-widget-drag-handler="1">

通过Java 5显示的锁机制,为每个银行账户创建一个锁对象,在存款操作进行加锁和解锁的操作

  • 银行账户

  • <span class="hljs-doctag">@author 张凯

  • */
    <span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Account {
    <span class="hljs-keyword">private Lock accountLock = <span class="hljs-keyword">new ReentrantLock();
    <span class="hljs-keyword">private <span class="hljs-keyword">double balance; <span class="hljs-comment">// 账户余额

    <span class="hljs-comment">/**

    • 存款
    • <span class="hljs-doctag">@param money
    • 存入金额
      */
      <span class="hljs-function"><span class="hljs-keyword">public <span class="hljs-keyword">void <span class="hljs-title">deposit<span class="hljs-params">(<span class="hljs-keyword">double money) {
      accountLock.lock();
      <span class="hljs-keyword">try {
      <span class="hljs-keyword">double newBalance = balance + money;
      <span class="hljs-keyword">try {
      Thread.sleep(<span class="hljs-number">10); <span class="hljs-comment">// 模拟此业务需要一段处理时间
      }
      <span class="hljs-keyword">catch (InterruptedException ex) {
      ex.printStackTrace();
      }
      balance = newBalance;
      }
      <span class="hljs-keyword">finally {
      accountLock.unlock();
      }
      }

    <span class="hljs-comment">/**

    • 获得账户余额
      */
      <span class="hljs-function"><span class="hljs-keyword">public <span class="hljs-keyword">double <span class="hljs-title">getBalance<span class="hljs-params">() {
      <span class="hljs-keyword">return balance;
      }
      }

      <span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="" width="15" height="15" data-cke-widget-drag-handler="1">

      按照上述三种方式对代码进行修改后,重写执行测试代码Test01,将看到最终的账户余额为100元。当然也可以使用Semaphore或CountdownLatch来实现同步。

      61、编写多线程程序有几种实现方式?

      答:Java 5以前实现多线程有两种实现方法:一种是继承Thread类;另一种是实现Runnable接口。两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活。

      (编辑:好传媒网)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读