从软件的角度来说,并发
就是在一段时间内以交替的方式去完成多个任务,而并行
就是以齐头并进的方式去完成多个任务。
从硬件的角度来说,在一个处理器一次只能够运行一个线程的情况下,并发
可以有一个处理器通过使用时间片分配的方式实现,而并行
则需要靠多个处理器在同一时刻各自运行一个线程来实现。
多线程的实质就是实现并发化
。
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在Java中垃圾回收线程就是特殊的守护线程。
04. 创建线程有哪几种方式?Java标准库类java.lang.Thread就是Java平台对线程的实现 。Thread类或其子类的一个实例就是一个线程。
多线程的实现方式有两类:
备注:Thread类的两个常用构造器是:Thread()和Thread(Runnable target)。相应地,Java语言种创建线程的有两种常用方式。一种是使用第一个构造器:定义Thread类的子类,在该子类种覆盖(Override)run方法并在该方法种实现线程任务处理逻辑;另一种是使用第二个构造器:创建一个java.lang.Runnable接口的实例,并在该实例的run方法种实现任务处理逻辑,然后以该Runnable接口实例作为构造器的参数直接创建(new)一个Thread类的实例。
但是不管是采用哪种方式创建线程,一旦线程的run方法被执行(由Java虚拟机调用)结束,相应的线程的运行也就结束了。其中run方法执行结束包括正常结束(run方法返回)以及代码中抛出异常而导致的中止。
线程属于“一次性用品”,start方法也只能被调用一次,多次调用同一个Thread实例的start方法会导致抛出IllegalThreadStateException异常。
在Java平台中,一个线程就是一个对象,Java虚拟机会为每个线程分配调用栈(Call Stack)所需的内存空间。调用栈用于跟踪Java代码(方法)间的调用关系以及Java代码对本地代码(Native Code,通常是C代码)的调用。另外Java平台中每个线程可能还有一个内核线程与之对应。
Java平台中的任意一段代码总是由确定的线程负责执行的,这个线程就相应地被称为这段代码的执行线程
。同一段代码可以被多个线程执行。
如果没有启动线程而是在应用代码中直接调用线程的run方法的话,那么这个线程的run方法其实运行在当前线程(即run方法的调用方代码的执行线程)之中而不是运行在其自身线程中,从而违背了创建线程的初衷。
Thread类所实现的
05. runnable和callable的区别是什么?首先,它们都是接口。其次,Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已;然而,Callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。
06. 简述JDK、JRE、JVM之间的关系答:JDK是一套编写Java应用程序的工具包,也就是一个Java程序开发环境。包括Java的运行环境,也就是JRE。Java虚拟机,即JVM运行在JRE中,属于Java应用程序运行的载体。
07. 描述一下类加载机制的含义和过程答:这里完整的描述应该是Java虚拟机把描述类的数据从class文件加载到内存的过程,这里边包含多个步骤,包括:类文件的加载,数据的校验、变量的解析以及初始化,并最终将符号引用转换为直接引用,最终使用。这些过程都是在Java运行期间进行的。其中“通过一个类的全限定名来获取此类的二进制字节流”的代码称为“类加载器”,类加载器依据双亲委派原则进行类的加载。
08. 说说你对Run-time Data Areas的理解答:从官网来看,Java运行时数据区包括pc寄存器、Java虚拟机栈、堆、方法区、运行时常量池以及本地方法栈。其中pc寄存器用来存储线程执行的字节码的行号,Java虚拟机栈用来维护局部变量和结果的调用和方法返回,堆是存储所有对象及其实例变量的内存区域,而方法区存储的是类的元数据信息,包括元数据、常量池、静态变量、字段以及方法,运行时常量池,即constant_pool相当于符号表,用于解析变量方法和字段;本地方法栈用来为虚拟机使用到的Native方法服务。这里重点是Java虚拟机栈、Heap和方法区
09.分布式系统的设计目标:你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款