`
enetor
  • 浏览: 188519 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java多线程专题测试一:基础知识

阅读更多

一. 基础知识

1. 进程和线程的区别?

      什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:

      进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。
一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。
同一进程中的两段代码不能够同时执行,除非引入线程。
线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。
线程占用的资源要少于进程所占用的资源。
进程和线程都可以有优先级。
在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。

       线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可 少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

 

       区别:

      简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
      线程的划分尺度小于进程,使得多线程程序的并发性高。
      另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
      线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
      从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

 

 

2. Thread和Runnable有什么区别?

      Thread类是Runnable接口的子类,在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)
此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。

 

3. 线程有哪四种状态?

      java的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行。

      新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存
      就绪状态:当一个线程创建了以后,其他的线程调用了它的start()方法,该线程就进入了就绪状态。处于这个状态的线程位于可运行池中,等待获得CPU的使用权
      运行状态:处于这个状态的线程占用CPU,执行程序的代码
      阻塞状态:当线程处于阻塞状态时,java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。

 

4. sleep/join/wait的作用?sleep 和wait 有何异同?

      sleep()方法是Thread类的方法,因此它不能改变对象的机锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然 休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。而wait()方法则会在线程休眠的同时释放掉机锁,其他线程可以访问该对象。

      join()方法使当前线程停下来等待,直至另一个调用join方法的线程终止。

 

5、怎样会进入阻塞状态?

阻塞状态分为三种情况:
1、 位于对象等待池中的阻塞状态:当线程运行时,如果执行了某个对象的wait()方法,java虚拟机就回把线程放到这个对象的等待池中
2、 位于对象锁中的阻塞状态,当线程处于运行状态时,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他的线程占用,JVM就会把这个线程放到这个对象的琐池中。
3、 其它的阻塞状态:当前线程执行了sleep()方法,或者调用了其它线程的join()方法,或者发出了I/O请求时,就会进入这个状态中。


6、o.notify()和o.notifyAll()有何区别?

notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法。两者的最大区别在于:
    notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
    notify则文明得多他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁此时如果该对象没有再次使用notify语句,则即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。

7、interrupt有何作用?

中断线程

Thread.interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出 阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而 提早地终结被阻塞状态。

如果说interrupt()是往一个正在睡觉的人头上泼一盆凉水的话,那么stop()就是一棒子直接把那个人打死了。

stop()是强制中段线程,现在已经不推荐使用。
interrupt()相对来说还温柔些,会让你把打开的资源挨个关闭。

8、可以synchronized为null的对象吗,为什么?

不行,null不属于java.lang.Object类型

 

分享到:
评论

相关推荐

    专题讲座资料(2021-2022年)多线程端口扫描器Java课程设计报告源代码.doc

    【标题】:“专题讲座资料(2021-2022年)多线程端口扫描器Java课程设计报告源代码.doc”所涉及的知识点主要集中在Java编程、多线程技术以及网络端口扫描原理。 【教育资料】:这份资料是教育性质的,旨在帮助学生...

    第12、13、14章的Java专题课件及源程序

    这一章可能主要介绍了Java的基础知识,包括类、对象和封装的概念。类是Java中的基本构造块,它定义了一组相关属性和行为。对象则是类的实例,代表现实世界中的实体。封装是面向对象编程的重要特性,通过访问修饰符...

    Java架构面试专题.zip

    这个压缩包可能包含各种Java基础知识、高级概念、设计模式、并发编程、框架应用等多个方面的内容。以下是一些可能涵盖的重要知识点: 1. **Java基础**:这部分可能涉及Java语法基础,如类、对象、封装、继承、多态...

    “java高分面试指南”-25分类227页1000+题50w+字解析.pdf

    Java高分面试指南是一个涵盖Java相关知识的综合指南,涵盖了Java基础知识、Java开发平台、Java语言特点、面向对象编程、数据结构、Java数据类型、标识符命名规则、instanceof关键字、隐式转换和显式转换等多方面的...

    java基本功面试专题

    Java基本功面试专题涵盖了许多核心概念,是求职者在准备Java相关职位面试时不可或缺的知识点。这份2W字的详细资料可能包括了类与对象、数据类型、控制结构、异常处理、内存管理、多线程、集合框架、IO流、网络编程、...

    Java架构面试专题(含答案)和学习笔记.rar

    1. **基础知识**:这是面试的基础,包括Java语法、面向对象编程、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)、多线程、同步机制(synchronized、Lock等)、IO/NIO流、反射、枚举等。 2. **JVM**:...

    记忆测试系统.rar

    JAVA作为强类型、面向对象的语言,其核心特性包括自动内存管理(垃圾回收)、类库丰富以及强大的多线程支持。在记忆测试系统中,JAVA的这些特性保证了系统的稳定性和高效性。开发者利用JAVA的内存管理机制,可以避免...

    编程专题讲座电子书(免费赠送)\Java开发技术大全

    6. **多线程编程**:Java提供了丰富的线程API,包括Thread类、Runnable接口、同步机制(synchronized、wait、notify)等,用于构建并发应用程序。 7. **网络编程**:学习Socket编程,理解TCP/IP协议,以及如何使用...

    专题资料(2021-2022年)Java程序设计项目实践考核报告(1).doc

    - 项目选题通常基于学生的兴趣和能力,要求涵盖Java编程的四大技术领域:基础编程、GUI编程、数据库编程和网络编程(如Socket和多线程)。 - 项目计划包括搜集资料、编写设计说明书、任务分配等步骤,确保团队协作...

    java-异样记事本

    《Java异样记事本》是一个关于在Java编程环境下实现一个独特记事本应用的专题。这个项目旨在探讨如何利用Java技术栈构建一个具有特定功能的文本编辑器,以展示Java在开发桌面应用程序中的能力。下面我们将深入探讨这...

    java架构面试专题(含答案).rar

    Java架构面试专题是针对Java开发人员的一系列深度面试问题,这些问题涵盖了从基础到高级的各个方面,旨在测试候选人的技能和经验。2020年的面试真题尤其反映了当前业界对Java开发者的需求和期望,其中可能包括了Java...

    java面试笔试题集锦

    4. **多线程**:Java提供了丰富的多线程支持,如Thread类、Runnable接口、同步机制(synchronized关键字、Lock锁、信号量等)、线程池(ExecutorService)等。 5. **IO流与NIO**:输入/输出流的理解,以及...

    软件设计师重点考点

    9.2 Java多线程机制 295 9.3 流式输入输出与文件处理 295 9.3.1 Java输入输出类库继承关系 296 9.3.2基于标准输入输出的IO操作 296 9.3.3文件读写及随机访问 297 9.3.4Java的文件管理 297 9.4 Java网络通信 297 ...

    Java架构面试专题(含答案)和学习笔记

    Java架构面试专题涵盖了Java开发语言的核心知识、高级特性、并发编程、内存管理、垃圾收集、JVM优化、设计模式、框架应用、数据库交互、微服务架构等多个方面,这些都是面试中常被问到的关键点。本专题旨在帮助Java...

    当当网java版

    理解Java的基本语法、面向对象编程、异常处理、多线程等基础知识是构建当当网java版的基础。 2. **Spring框架**:Spring是Java企业级应用的核心框架,用于管理对象依赖和提供事务控制。在当当网java版的实现中,...

    Java课程网络资源的建设与探索.pdf

    其次,需要建设专题知识点,以便学生能够更好地掌握 Java 语言的基础知识点。 再次,需要建设专题资源库,以便学生能够更好地掌握程序设计方法。 最后,需要建设自我测试模块,以便学生能够更好地提高实践能力和...

    JAVA 手机网络游戏

    5. **网络编程**:Java手机网络游戏需要处理客户端与服务器之间的数据交换,涉及TCP/IP协议、Socket编程和多线程技术。开发者应理解如何建立连接、发送接收数据、处理并发请求。 6. **游戏状态管理**:游戏状态管理...

    2023年《Java面试题手册》.pdf

    本篇文章将深入探讨Java面试中常见的知识点,包括Java的OOP概念、异常处理、反射、注解、序列化、多线程并发、JVM、Spring Boot框架以及Dubbo服务治理。 首先,Java OOP(面向对象编程)是Java的核心,它包含了类、...

    经典的面试题库(含C++、Java等的专题)

    4. 多线程:线程的创建、同步机制(synchronized、Lock)、并发工具类(ExecutorService、CountDownLatch等)。 5. 文件与I/O:流的使用、NIO(New IO)与NIO.2。 6. 设计模式:单例、工厂、观察者、装饰者等23种...

Global site tag (gtag.js) - Google Analytics