做同城特价的网站,品牌vi公司,吉林手机版建站系统信息,网站建设找哪个平台1、线程和进程有什么区别#xff1f;
进程是操作系统资源分配的基本单位#xff0c;而线程是任务调度和执行的基本单位
线程是进程的子集#xff0c;一个进程可以有很多线程#xff0c;每条线程并行执行不同的任务。
不同的进程使用不同的内存空间#xff0c;而所有的线…1、线程和进程有什么区别
进程是操作系统资源分配的基本单位而线程是任务调度和执行的基本单位
线程是进程的子集一个进程可以有很多线程每条线程并行执行不同的任务。
不同的进程使用不同的内存空间而所有的线程共享一片相同的内存空间。
2、如何在Java中实现线程
继承Thread类
class Handler extends Thread{public void run(){//方法重写}public static void main(String[] args){Thread thread new Handler();//创建线程对象thread.start();//启动线程}
}实现Runnable接口
class Handler implements Runnable{public void run(){//方法实现}public static void main(String[] args){Handler handler new Handler();Thread thread new Thread(handler);//创建线程对象thread.start();//启动线程}
}3、Java 关键字volatile 与 synchronized 作用与区别 1volatile 它所修饰的变量不保留拷贝直接访问主内存中的。 在Java内存模型中有main memory每个线程也有自己的memory (例如寄存器)。
为了性能一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间在一个线程的memory中的值可能与另外一个线程memory中的值或者main memory中的值不一致的情况。
一个变量声明为volatile就意味着这个变量是随时会被其他线程修改的因此不能将它cache在线程memory中。 2synchronized
当它用来修饰一个方法或者一个代码块的时候能够保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时一个时间内只能有一个线程得到执行。
二、当一个线程访问object的一个synchronized(this)同步代码块时另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是当一个线程访问object的一个synchronized(this)同步代码块时其他线程对object中所有synchronized(this)同步代码块的访问将被阻塞。
4、线程生命周期
新建一个线程时它的状态是New。当我们调用线程的start()方法时状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且将它们的状态改变为Running。其他的线程状态还有WaitingBlocked 和Dead。
5、死锁
指多个进程在运行过程中因争夺资源而造成的一种僵局当处于这种状态时若无外力作用它们都将无法再向前推进。
原因可归结为两点竞争资源、 进程间推进顺序非法 产生死锁的必要条件
互斥条件在一段时间内某资源仅为一进程所占用。 请求和保持条件对已获得的资源保持不放。 不剥夺条件已获得的资源只能由自己释放。 环路等待条件存在一个进程--资源的环形链。
6、什么是线程池 为什么要使用它
创建线程要花费昂贵的资源和时间如果任务来了才创建线程那么响应时间会变长而且一个进程能创建的线程数有限。
线程池实现了线程重复利用节约了时间和资源。
// Java线程池的完整构造函数
public ThreadPoolExecutor(int corePoolSize, // 线程池长期维持的线程数即使线程处于Idle状态也不会回收。int maximumPoolSize, // 线程数的上限long keepAliveTime, TimeUnit unit, // 超过corePoolSize的线程的idle时长// 超过这个时间多余的线程会被回收。BlockingQueueRunnable workQueue, // 任务的排队队列ThreadFactory threadFactory, // 新线程的产生方式RejectedExecutionHandler handler) // 拒绝策略
7、反射
JAVA反射机制是在运行状态中对于任意一个实体类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意方法和属性这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
8、JDK 、 JRE 、JVM有什么区别和联系
JVM Java 虚拟机。能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说jvm 是 Java 能够跨平台的核心。
JRE Java 运行时环境。包含两个部分jvm和 Java 的一些基本类库。
JDK Java 开发工具包。jdk 是整个 Java 开发的核心它集成了 jre 和一些好用的小工具。
这三者的关系是一层层的嵌套关系。JDKJREJVM。 9、深拷贝浅拷贝 数据类型分为两种基础类型和引用类型
基础类型像Number、String、Boolean等这种为基本类型 引用类型Object和Array
浅拷贝只是复制了对象的引用地址两个对象指向同一个内存地址修改其中任意的值另一个值会随之变化
深拷贝是将对象及值复制过来两个对象修改其中任意的值另一个值不会改变。
10、JVM内存分为哪几部分?各个部分的作用是什么?
JVM内存区域分为五个部分分别是堆方法区虚拟机栈本地方法栈程序计数器。 1堆。
堆是Java对象的存储区域任何用new字段分配的Java对象实例和数组。 2方法区。
它用于存储已被虚拟机加载的类信息常量静态变量即时编译器编译后的代码等数据方法区从JDK1.8永久代被移除。 3虚拟机栈。
虚拟机栈中执行每个方法的时候都会创建一个栈帧用于存储局部变量表操作数栈动态链接方法出口等信息。 4本地方法栈。
与虚拟机栈发挥的作用相似相比于虚拟机栈为Java方法服务本地方法栈为虚拟机使用的Native方法服务执行每个本地方法的时候都会创建一个栈帧用于存储局部变量表操作数栈动态链接方法出口等信息。 5程序计数器。
指示Java虚拟机下一条需要执行的字节码指令。
总其中方法区和堆被JVM中多个线程共享比如类的静态常量就被存放在方法区供类对象之间共享虚拟机栈本地方法栈pc寄存器是每个线程独立拥有的不会与其他线程共享。
11、为什么会出现4.0-3.60.40000001这种现象
2进制的小数无法精确的表达10进制小数在计算10进制小数的过程中要先转换为2进制进行计算这个过程中出现误差。
12、“”比较的是什么
“”两边是对象比较地址。
“”两边是基本类型比较数值。