`
holoblog
  • 浏览: 1270370 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19627
文章分类
社区版块
存档分类
最新评论

线程常见笔试题

 
阅读更多

问题一:sleep与wait区别

  其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

  在java.lang.thread类中,提供了sleep(),

  而java.lang.object类中提供了wait(),notify()和notifyall()方法来操作线程

  sleep()可以将一个线程睡眠,参数可以指定一个时间。

  而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。

  wait有两种形式wait()和wait(milliseconds).

  sleep和wait的区别有:

  1,这两个方法来自不同的类分别是thread和object

  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

  3,wait,notify和notifyall只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用

  synchronized(x){

  x.notify()

  //或者wait()

  }

  4,sleep必须捕获异常,而wait,notify和notifyall不需要捕获异常

问题二、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?

  答:有两种实现方法,分别是继承thread类与实现runnable接口

  用synchronized关键字修饰同步方法

  反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。


问题三、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

  答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

  当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。


问题四、启动一个线程是用run()还是start()?

  答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由jvm调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。


问题五、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

  答:不能,一个对象的一个synchronized方法只能由一个线程访问。

问题六、请说出你所知道的线程同步的方法。

  答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

  sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉

  interruptedexception异常。

  notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待

  状态的线程,而是由jvm确定唤醒哪个线程,而且不是按优先级。

  allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

问题七、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

  答:多线程有两种实现方法,分别是继承thread类与实现runnable接口

  同步的实现方面有两种,分别是synchronized,wait与notify


问题八、线程的基本概念、线程的基本状态以及状态之间的关系

  答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
java中的线程有四种状态分别是:运行、就绪、挂起、结束

问题九、简述synchronized和java.util.concurrent.locks.lock的异同?

  答:主要相同点:lock能完成synchronized所实现的所有功能

  主要不同点:lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而

  lock一定要求程序员手工释放,并且必须在finally从句中释放。

分享到:
评论

相关推荐

    Java面试笔试题大汇总(最全+详细答案)

    Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...

    软件类职位常见笔试题

    "软件类职位常见笔试题"这个主题涵盖了多种类型的题目,旨在测试候选人在编程、算法、操作系统、网络、数据库等多个方面的知识。以下是对这些常见笔试题型的详细解析: 1. **编程题**:编程题通常要求应聘者用特定...

    Java程序员常见笔试题

    Java 程序员常见笔试题 Java 是一种广泛应用的编程语言,掌握 Java 的基础知识是任何 Java 程序员的必备技能。下面是 Java 程序员常见笔试题的知识点总结: 面向对象的特征 抽象:抽象是忽略一个主题中与当前目标...

    java面试常见笔试题(源代码)

    Java面试是评估程序员技术能力的重要环节,而Java面试常见笔试题常常涉及到语言基础、数据结构、算法、多线程、网络、设计模式等多个方面。在准备面试时,深入理解并能够熟练应用这些知识点至关重要。本资源包含的...

    java常见笔试题.rar

    以下是对"java常见笔试题"的详细解析: 1. **基础语法**:Java的基础语法包括数据类型(如基本类型、引用类型)、变量、运算符、流程控制(如if-else、switch-case、for、while等)以及方法的定义和调用。理解这些...

    Java笔试题汇总(125道企业常见java笔试题)

    本资料"Java笔试题汇总(125道企业常见java笔试题)"包含了125个企业在招聘过程中可能会遇到的Java相关问题及其答案,涵盖了Java基础、Javaweb等多个方面,旨在帮助求职者全面了解并准备Java面试。 Java基础部分...

    变态版java笔试试题

    Java 笔试试题变态版是 Java 开发者面试的常见题目,涵盖了 Java 基础知识、垃圾收集器、字符串、Math 函数、线程、数组、多态性、Set 集合等方面。 一、垃圾收集器(GC) 垃圾收集器(GC)是 Java 中自动管理...

    常见的Java 笔试题

    以下是一些常见的Java笔试题及其相关知识点: 1. **数据类型与变量**: - Java分为基本数据类型(如int, double, boolean等)和引用数据类型(如类、接口、数组)。理解它们的区别和用法是基础。 - 变量声明时...

    C/C++常见笔试题

    综上所述,"C/C++常见笔试题"涵盖了C++语言基础、面向对象编程、MFC应用开发以及代码移植的相关知识,是准备IT面试和提高编程技能的重要资源。通过解读书中题目和实践代码移植,可以有效提升在C++和MFC领域的专业...

    java笔试题库.pdf

    #### 七、其他常见笔试题 1. **Java中的基本数据类型有哪些?** - **解析**:Java中的基本数据类型包括: - `byte` - `short` - `int` - `long` - `float` - `double` - `boolean` - `char` 2. **Java中...

    Java笔试题大集合及答案(另附各大公司笔试题)

    Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...

    常见的java面试笔试题大汇总

    ### 常见的Java面试笔试题大汇总详解 #### 抽象 抽象在计算机科学中,特别是面向对象编程中,是一种重要的概念。它涉及到在设计软件系统时,专注于核心功能,而忽略不相关的细节。这有助于提高代码的可读性和可维护...

    农行Java笔试题

    【标题】"农行Java笔试题"涉及到的Java知识点涵盖了编程基础、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个领域,这些都是Java程序员必须掌握的核心技能。 首先,从编程基础角度来...

    Qt笔试题总结

    **Qt笔试题总结** Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面应用、嵌入式系统和移动设备。它提供了丰富的API,让开发者能够方便地创建美观且功能强大的用户界面。本总结将针对Qt笔试题中的...

    百度历年笔试题

    随着AI的发展,图像识别、机器学习、深度学习等相关知识在百度笔试题中越来越常见。理解基础的图像处理概念和AI算法原理,对于从事相关领域的开发人员尤为关键。 七、软件工程与项目管理 软件开发流程、版本控制、...

    Java华为笔试题,Java常见笔试题

    Java的输入输出(I/O)系统也经常出现在笔试题中,包括File类的使用、流的概念(如字节流和字符流)、缓冲区的运用以及对象序列化。NIO(New IO)框架的出现提供了更高效的数据传输方式,比如通道(Channel)和选择...

    125条常见的java面试笔试题大汇总.pdf

    以上是对《125条常见的java面试笔试题大汇总》部分知识点的详细解析。这些知识点涵盖了Java编程的基础概念和技术要点,对于准备面试的求职者来说非常重要。理解这些概念不仅有助于提高编程技能,还能加深对Java语言...

    java常见英语笔试题

    Java编程语言在面试和笔试中常常涉及一些技术性问题,...以上就是关于Java笔试题中常见的问题及其解答,涵盖了并发控制、类与接口、异常处理、内存管理、封装类、多态性等多个方面,这些都是Java开发者必备的知识点。

    计算机常见笔试题

    ### 计算机常见笔试题 #### 题目1:单向链表倒序建立 - **题目描述**:给定一个单向链表,要求在不申请新空间的情况下将其倒序,并返回新的链表头节点。 - **链表结构体定义**: ```cpp struct Link { int data;...

    常见的java笔试题

    在Java笔试题中,通常会涵盖以下几个核心领域: 1. **基础语法**:包括类、对象、接口、继承、多态、封装等概念。理解类的构造器、静态成员与实例成员的区别,以及如何实现接口。此外,还要了解访问修饰符(public,...

Global site tag (gtag.js) - Google Analytics