线程面试题

什么是死锁?

线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这

些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代

码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放

资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所

需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有

的资源,将产生死锁。


死锁产生的原因是什么?

1. 系统资源的竞争

系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。

2. 进程运行推进顺序不合适

进程在运行过程中,请求和释放资源的顺序不当,会导致死锁


什么是进程和线程?进程和线程的区别?

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程中执行运算的最小单位。线程也被称为轻量级进程。

区别?

地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。

资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

执行过程:1.每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。

    但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

          2.线程是处理器调度的基本单位,但是进程不是。


1、线程安全是:

如果多个线程每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

2、线程不安全:

在多个线程同时访问同一个对象时会发生数据错误、不完整等情况时 那就是线程不安全.


创建线程的三种方式和线程池的优点

创建线程的三种方式:

1,继承Thread类创建线程。

2,实现Runnable接口创建线程。

3,使用Callable和Future创建线程。

线程池的优点:

1,避免了因为线程的创建和销毁锁带来的性能开销。

2,有效控制线程池的最大并发数,避免大量的线程之间因抢占系统资源而阻塞。

3,能够对线程进行简单的管理,并提供定时、定期等功能操作。


synchronized与Lock的区别

1.synchronized是java内置关键字,在jvm层面。Lock是一个java类;

2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

3.synchronized会自动释放锁,Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

5.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)

6.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 下面最近发的一些并发编程的文章汇总,通过阅读这些文章大家再看大厂面试中的并发编程问题就没有那么头疼了。今天给大家总...
    架构师springboot阅读 805评论 0 3
  • 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让...
    尧淳阅读 1,671评论 0 25
  • 文/刘小娴 感觉自己忙这个端午节卖狗狗粽子的事情,忙到屁滚尿流,生活节奏彻底乱了,书也不读了,文章也不写了,饭也不...
    小闲读书阅读 351评论 1 2
  • —— 砍柴 南无阿弥陀佛~
    一念_2307阅读 319评论 0 1
  • 复习random库,time库,turtle库
    XING_7阅读 196评论 0 1

友情链接更多精彩内容