【创作赢红包】进线程有关的面试题

简介: 【创作赢红包】进线程有关的面试题

一,简述 wait 和 sleep 有什么区别?

  1. sleep是线程类(Thread)的方法;wait是Object类的方法
  2. sleep是使线程休眠,不会释放对象锁;wait是使线程等待,释放锁
  3. sleep()方法导致了程序暂停(线程进入睡眠状态),但是他的监控状态依然保持着,当指定的时间到了又会自动恢复到 可运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
  4. wait是让自己暂时等待,放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
  5. 调用sleep进入阻塞状态;调用wait进入就绪状态

二,请描述 volatile 关键字的作用

  1. 线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
  2. 顺序一致性:禁止指令重排序。

三,sleep()方法和wait()方法区别

共同点:都是使线程暂停一段时间的方法。

不同点:①原理不同-sleep()是属于Thread类中的,而wait()方法,则是属于Object类中的。

②锁处理机制不同-sleep()最主要作用使线程暂停执行一段时间,时间一到自动恢复,不涉及线程通讯,因此,调用sleep()方法并不会释放锁。而当调用wait()方法的时候,线程会释放它所占的锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

③使用区域不同-wait()方法必须放在同步代码块或者同步方法中使用,sleep()可以用在任何地方

四,简述线程池有什么优点?

1、重用存在的线程,减少对象创建销毁的开销。

2、可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞

争,避免堵塞。

3、提供定时执行、定期执行、单线程、并发数控制等功能。

五、非常重要的面试题:谈谈进程和线程之间的区别![高频]―谈到操作系统,进程线程的概念和区别,就是出场频率最高的问题(没有之一)

1.进程包含线程

2.线程比进程更轻量,创建更快,销毁也更快

3.同一个进程的多个线程之间共用同一份内存/文件资源.进程和进程之间,则是独立的内存/文件资源

4.进程是资源分配的基本单位,线程是调度执行的基本单位

六、工作目录:

1.如果是通过命令行来执行程序,此时当前命令所在的目录就是工作目录~~

2.如果你使用IDEA来执行执行Java程序,这个时候你的工作目录是IDEA打开的项目的目录

3.如果你使用的是Tomcat 来运行一个war包,你的工作目录就是Tomcat的 bin目录~

七、程序和进程的本质区别是;

   “静态”意味着程序是永久存在的,“动态”表现为进程是一个暂时的过程,可以创建也可以撤销。在进程的一个生存周期中,具有运行、就绪和等待3种可能的状态。 程序和进程也是紧密相关的:进程由程序、数据和进程控制快(PCB)3部分组成,显然如果没有程序,也就没有进程。








目录
相关文章
|
2天前
|
安全 Java 程序员
面试直击:并发编程三要素+线程安全全攻略!
并发编程三要素为原子性、可见性和有序性,确保多线程操作的一致性和安全性。Java 中通过 `synchronized`、`Lock`、`volatile`、原子类和线程安全集合等机制保障线程安全。掌握这些概念和工具,能有效解决并发问题,编写高效稳定的多线程程序。
37 11
|
1天前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
17 6
|
6天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
21天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
21天前
|
Java 调度
|
4月前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
|
4月前
|
消息中间件 前端开发 NoSQL
面试官:线程池遇到未处理的异常会崩溃吗?
面试官:线程池遇到未处理的异常会崩溃吗?
90 3
面试官:线程池遇到未处理的异常会崩溃吗?
|
4月前
|
消息中间件 前端开发 NoSQL
面试官:如何实现线程池任务编排?
面试官:如何实现线程池任务编排?
49 1
面试官:如何实现线程池任务编排?
|
5月前
|
Java
【多线程面试题二十五】、说说你对AQS的理解
这篇文章阐述了对Java中的AbstractQueuedSynchronizer(AQS)的理解,AQS是一个用于构建锁和其他同步组件的框架,它通过维护同步状态和FIFO等待队列,以及线程的阻塞与唤醒机制,来实现同步器的高效管理,并且可以通过实现特定的方法来自定义同步组件的行为。
【多线程面试题二十五】、说说你对AQS的理解
|
5月前
|
Java
【多线程面试题十六】、谈谈ReentrantLock的实现原理
这篇文章解释了`ReentrantLock`的实现原理,它基于Java中的`AbstractQueuedSynchronizer`(AQS)构建,通过重写AQS的`tryAcquire`和`tryRelease`方法来实现锁的获取与释放,并详细描述了AQS内部的同步队列和条件队列以及独占模式的工作原理。
【多线程面试题十六】、谈谈ReentrantLock的实现原理