Java面试-每日十题

这篇具有很好参考价值的文章主要介绍了Java面试-每日十题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.notify()和notifyAll()的异同

2.sleep()和wait()的异同

3.什么是死锁?

4.volatile是什么?

5.start()方法和run()方法的区别

6.为什么wait、notify、notifyAll只能调用在Object类中?

7.为什么wait、notify、notifyAll只能在同步方法或同步代码块中使用?

8.Interrupted和isInterruptted方法的区别

9.synchronized和Lock的异同

  相同点

  不同点

     synchronized

     Lock

10.如何保证多个线程顺序执行?


1.notify()和notifyAll()的异同

相同点:notify()和notifyAll()都可以用来唤醒使用wait进入阻塞状态的线程

不同点:

1.notify()会唤醒一个被wait的线程,若有多个线程被wait,则唤醒优先级最高的一个

   notifyAll()会唤醒所有被wait的线程

2.notify()可能导致死锁;notifyAll()不会导致死锁

2.sleep()和wait()的异同

相同点:都会使得当前线程进入阻塞状态

不同点:

1.sleep()到时间后会主动进入就绪状态,wait必须等待notify()唤醒

2.方法声明的位置不同:thread类中声明sleep();object类中声明wait()

3.调用的要求不同:sleep()方法可以在任何需要的场景下调用,wait必须使用在同步代码块或者同步方法中

4.是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会主动释放锁

3.什么是死锁?

死锁:不同的线程分别占用对方的需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,形成了线程的死锁

4.volatile是什么?

1.volatile:用来修饰共享变量

2.作用:

       保证了不同线程对这个变量的可见性:当一个线程修改了每个变量的值时,新值对其他线程是立即可见的,volatile关键字会强制将修改的值立即写入内存。

        禁止进行指令重排序:程序执行到被volatile修饰的变量时,前面的操作的更改肯定全部已经执行,且执行结果对后面的操作可见

5.start()方法和run()方法的区别

start():用来启动新线程,且start()内部调用了run()方法

run():调用run()方法时,只是在原来的线程中调用,没有开启新线程

6.为什么wait、notify、notifyAll只能调用在Object类中?

        因为Java提供的锁是针对对象而言的。以wait方法举例,每个对象存在锁,线程需要等待某些锁时调用对象的wait()方法才有意义。若wait方法定义在Thread类中,线程需要等待的锁就不明显了。由于这三者都是锁级别的操作,定义在Object类中就是因为锁是对象级别的。

7.为什么wait、notify、notifyAll只能在同步方法或同步代码块中使用?

        因为只有当前线程拥有了某个对象的独占锁时才可以调用对象的wait、notify、notifyAll方法,否则会抛出IlegalMonitorStateException;而线程必须在同步方法或同步代码块中才能得到该对象的同步监视器-锁。

8.Interrupted和isInterruptted方法的区别

interrupted:使用该方法中断一个线程,就会设置中断状态标识为true,且中断状态会被清零

isInterruptted:使用该方法用来查询其他线程的中断状态,不会改变中断状态标识

9.synchronized和Lock的异同

相同点:

        二者都是通过加锁方式同步解决线程安全问题

        都是阻塞式同步

不同点:

        synchronized:

                1.执行完同步代码后,会自动释放同步监视器

                2.是Java中的关键字,需要jvm来实现

       

         Lock:

                1.需要手动的启动,也需要手动关闭

                2.是jdk5.0提供的API,需要lock()和unlock()方法配合try-finnaly实现

10.如何保证多个线程顺序执行?

        使用线程类的join()方法

        join()方法:能够在一个线程中启动另一个线程,另一个线程完成后该方法才开始执行。文章来源地址https://www.toymoban.com/news/detail-468009.html

到了这里,关于Java面试-每日十题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯 题库 简单 每日十题 day7

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐酒。 题目描述 本题为填空题,只需要算出结果

    2024年02月07日
    浏览(44)
  • 蓝桥杯 题库 简单 每日十题 day3

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数(只计算正约数)。 解题思路 枚举,从1开始一直到1200000本身都作为1200000的除数,如果可以整除,则是它的约数 题目描述 本题为填空题,只需要算出结果后,在

    2024年02月08日
    浏览(41)
  • 蓝桥杯 题库 简单 每日十题 day4

    津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴

    2024年02月07日
    浏览(50)
  • 蓝桥杯 题库 简单 每日十题 day2

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自

    2024年02月07日
    浏览(42)
  • 蓝桥杯 题库 简单 每日十题 day6

    题目描述 给定一个单词,请问在单词中删除t个字母后,能得到的字典序最小的单词是什么? 输入描述 输入的第一行包含一个单词,由大写英文字母组成。 第二行包含一个正整数t。 其中,单词长度不超过100,t小于单词长度。 输出描述 输出一个单词,表示答案。 输入输出

    2024年02月08日
    浏览(39)
  • 面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?

    做 Java 开发的小伙伴,对 wait 方法和 notify 方法应该都比较熟悉,这两个方法在线程通讯中使用的频率非常高,但对于 notify 方法的唤醒顺序,有很多小伙伴的理解都是错误的,有很多人会认为 notify 是随机唤醒的,但它真的是随机唤醒的吗? 带着这个疑问,我们尝试休眠 1

    2024年01月24日
    浏览(47)
  • 每日五道java面试题之java基础篇(十二)

    AQS是⼀个JAVA线程同步的框架。是JDK中很多锁⼯具的核⼼实现框架。 在AQS中,维护了⼀个信号量state和⼀个线程组成的双向链表队列。其中,这个线程队列,就是⽤来给线程排队的,⽽state就像是⼀个红绿灯,⽤来控制线程排队或者放⾏的。 在不同的场景下,有不⽤的意义。

    2024年02月20日
    浏览(39)
  • 每日五道java面试题之java基础篇(九)

    对于还在正常运⾏的系统 : 可以使⽤jmap来查看JVM中各个区域的使⽤情况 可以通过jstack来查看线程的运⾏情况,⽐如哪些线程阻塞、是否出现了死锁 可以通过jstat命令来查看垃圾回收的情况,特别是fullgc,如果发现fullgc⽐较频繁,那么就得进⾏调优了 通过各个命令的结果,

    2024年02月20日
    浏览(41)
  • 每日三个JAVA经典面试题(四十三)

    在大数据环境下优化Java性能涉及多个方面,包括调整JVM设置、代码优化和选择合适的工具和框架。以下是一些具体的优化建议: 调整JVM参数 : 增加堆内存 :通过调整 -Xms (堆起始大小)和 -Xmx (堆最大大小)参数,为Java应用程序提供足够的内存空间,以减少垃圾回收的频

    2024年04月26日
    浏览(38)
  • 每日五道java面试题之springMVC篇(四)

    (1)转发:在返回值前面加\\\"forward:“,譬如\\\"forward:user.do?name=method4” (2)重定向:在返回值前面加\\\"redirect:“,譬如\\\"redirect:http://www.baidu.com” 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下: (1)加入Jackson.jar (2)在配置文件中配置

    2024年03月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包