ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

牛客网Java面试问答每日一记3

2021-10-16 22:32:33  阅读:133  来源: 互联网

标签:同步 Java 代码 死锁 牛客 一记 线程 监视器 资源


  1. 创建线程的几种方式?
  2. 概括性解释线程的几种状态
  3. 同步方法和同步代码块的区别
  4. 监视器内部如何做到线程同步?程序应该做到哪种级别的同步?
  5. 什么是死锁?
  6. 如何确保N个线程可以访问N个资源而又不导致死锁?

1:继承 Thread 类,重写/实现 run方法。  实现 Runnable 接口,实现 run方法。  实现 Callable 接口,重写 run 方法。  在程序中通过 Executor 框架实现创建线程

2:new 创建线程对象  runnable 线程对象创建完毕执行start方法后处于 runnable 状态  block 阻塞状态,等待对象的内置锁  waiting 等待状态,等待其他线程  time_waitting 有时间限制的等待其他线程

dead 死亡状态,线程任务执行完毕,线程死亡

3:同步方法锁住了一个方法(静态方法则锁住了一个类),需要当前对象(类对象)的锁,同步代码块只是锁住了一块代码,可以随意选择什么作为锁

4:监视器和锁在Java虚拟机中是一块使用的,监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联,线程在获取锁之前不允许执行同步代码

5:两条或多条线程彼此互相堵塞,在没有外力的情况下无法继续执行的现象叫做死锁

6:造成死锁的条件有四个:互斥性,不可剥夺性,资源持续获取与保存,形成一个资源获取闭环。如要不形成死锁从以上四个方面入手即可。

其中互斥性不可消除,线程资源不可剥夺行破坏成本大,不推荐使用只需从另外两个入手即可。

保证线程使用完资源后及时释放即可保证另一条线程获取资源的顺利运行。另外可以对线程访问资源安排顺序,这样就打破了线程访问资源闭环,也不会形成死锁

标签:同步,Java,代码,死锁,牛客,一记,线程,监视器,资源
来源: https://www.cnblogs.com/chensang21930/p/15415528.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有