多线程并发108题

1、Java中实现多线程有几种方法
2、继承Thread 类
3、实现Runnable 接口。
4、ExecutorService、 Callable、 Future 有返回值线程
5、基于线程池的方式
6、4种线程池
7、如何停止一个正在运行的线程
8、notify()和notifyAll()有什么区别?
9、sleep()和wait() 有什么区别?
10、volatile 是什么?可以保证有序性吗?
11、Thread 类中的start() 和 run() 方法有什么区别?
12、为什么wait, notify 和noti fy}l1这些方法不在thread类里面?
13、为什么wai t和noti fy方法要在同步块中调用?
14、Java中interrupted 和 isInterruptedd方法的区别?
15、Java中synchronized 和 ReentrantLock 有什么不同?
16、有三个线程I1, T2, T3,如何保证顺序执行?
17、SynchronizedMap和ConcurrentHashMap有什么区别?
18、什么是线程安全
19、Thread类中的yield方法有什么作用?
20、Java线程池中submitO和execute 0方法有什么区别?
21、说一说自己对于synchronized关键字的了解
22、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗synchronized关键字最主要的三种使用方式
23、什么是线程安全? Vector是一个线程安全类吗?
24、volatile关键字的作用?
25、简述一下你对线程池的理解
26、线程生命周期状态)
27、新建状态(NEW)
28、就绪状态( RUNNABLE)
29、运行状态(RUNNING)
30、阻塞状态(BLOCKED)
31、线程死亡(DEAD)
32、终止线程4种方式
33、start与run区别
34、JAVA后台线程
35、什么是乐观锁
36、什么是悲观锁
37、什么是自旋锁
38、Synchronized同步锁
39、ReentrantLock
40、Condition类和0bject类锁方法区别区别
41、tryLock 和lock和lockInterruptibly 的区别
42、Semaphore信号童
43、Semaphore与Reentr antLock区别
44、可重入锁(递归锁)
45、公平锁与非公平锁
46、ReadWriteLock 读写锁
47、共享锁和独占锁
48、重量级锁(Mutex Lock)
49、轻量级锁
50、偏向锁
51、分段锁
52、锁优化
53、线程基本方法
54、线程等待(wait)
55、线程睡眠( sleep)
56、线程让步(yield)
57、线程中断(interrupt)
58、Join等待其他线程终止
59、为什么要用join0方法?
60、线程唤醒(noti fy)
61、线程其他方法
62、进程
63、上下文
64、寄存器
65、程序计数器
66、FCB-切换桢 ”
67、上下文切换的活动
68、引起线程上下文切换的原因
69、同步锁
70、死锁
71、线程池原理
72、线程复
73、线程地的组成
74、拒绝策略
75、Java线程池工作过程
76、JAVA阻塞队列原理
77、Java中的阻塞队列
78、ArrayBlockingQueue(公平、非公平)
79、LinkedBlockingQueue(两个独立锁提高并发)
80、PriorityBlockingQueue(compareTo 排序实现优先)
81、DelayQueue ( 缓存失效、定时任务)
82、Synchr onousQueue (不存储数据、可用于传递数据)
83、Linke dTr ansferQueue
84,Linke JB1ocki ngDeque
85、在java中守护线程和本地线程区别
86、线程与进程的区别?
87、什么是多线程中的上下文切换?
88、死锁与活锁的区别,死锁与饥饿的区别?
89、Java中用到的线程调度算法是什么?
90、什么是线程组,为什么在Java中不推荐使用?
91、为什么使用Executor 框架?
92、在Java 中Executor 和Executors 的区别?
93、如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长?
94、什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?
95、Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
96、什么是Executors 框架?
97、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
98、什么是Callable 和Future?
99、什么是FutureTask?使用 ExecutorService 启动任务。
100、什么是并发容器的实现?
101、多线程同步和互斥有几种实现方法,都是什么?
102、什么是竞争条件?你怎样发现和解决竞争?
103、为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
104、Java 中你怎样唤醒一个阻塞的线程?
105、在Java 中CycliBarriar和CountdownLatch有什么区别?
106、什么是不可变对象,它对写并发应用有什么帮助
107、Java中用到的线程调度算法是什么?
108、什么是线程组,为什么在Java中不推荐使用?

1. Java中实现多线程有几种方法

继承Thread类;
实现Runnable接口;
实现(allable接口通过FutureTask包装器来创建Thread线程;
使用ExecutorService. Callable. Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方式)。.

2. 在java中守护线程和本地线程区别?

java中的线程分为两种:守护线程(Daemon)和用户线程(User) 。

任何线程都可以设置为守护线程和用户线程,通过方法Thread. setDaemon(bool on); true则把该线程设置为守护线程,反之则为用户线程。Thread .setDaemon0必须在Thread.start()之前调用,否则运行时会抛出异常。

两者的区别:
唯一的区别是判断虚拟机(VM)何时离开, Daemon是为其他线程提供服务,如果全部的User Thread已经撤离,Daemon没有可服务的线程,JVM撒离。也可以理解为守护线程是JM自动创建的线程(但不一定),用户线程是程序创建的线程;比如JVM的垃圾回收线程是一个守护线程, 当所有线程已经撤离,不再产生垃圾,守护线程自然就没事可干了,当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。

3. 线程与进程的区别?

进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。
一个程序至少有一一个进程,-一个进程至少有一个线程.

4. 什么是多线程中的上下文切换?

多线程会共同使用--组计算机上的CPU,而线程数大于给程序分配的CPU数量时,为了让各个线程都有执行的机会,就需要轮转使用CPU.不同的线程切换使用CPU发生的切换数据等就是上下文切换.

5. 死锁与活锁的区别,死锁与饥饿的区别?

死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的必要条件:
1、互斥条件:所谓互斥就是进程在某-时间内独占资源。
2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
4、循环等待条件:若干进程之间形成一-种 头尾相接的循环等待资源关系。活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重 复尝试,失败,尝试,失败。

活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”,而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。

饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致- -直无法执
行的状态。Java中导致饥饿的原因:
1、高优先级线程吞噬所有的低优先级线程的CPU时间。
2、线程被永久堵塞在一一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。
3、线程在等待-一个本身也处于永久等待完成的对象(比如调用这个对象的wait方法),因为其他线程总是被持续地获得唤醒.

6. Java中用到的线程调度算法是什么?

采用时间片轮转的方式。可以设置线程的优先级,会映射到下层的系统上面的优先级上,如非特别需要,尽量不要用,防止线程饥饿。

7. 什么是线程组,为什么在Java中不推荐使用?

ThreadGroup类,可以把线程归属到某一个线程组中,线程组中可以有线程对象,
也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式。
为什么不推荐使用?因为使用有很多的安全隐忠吧,没有具体追究,如果需要使
用,推荐使用线程池。

8. 为什么使用Executor框架?

每次执行任务创建线程new Thread(比较消耗性能,创建一个线程是比较耗时、耗资源的。
调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗很多系统资源。
接使用new Thread()启动的线程不利于扩展,比如定时执行、定期执行、定时定期执行、线程中断等都不便实现。

9. 在Java中Executor和Executors的区别?

Executors工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。
Executor接口对象能执行我们的线程任务.
ExecutorService接口继承了Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执行的状态并且可以获取任务的返回值.
使用ThreadPoolExecutor可以创建自定义线程池。
Future表示异步计算的结果,他提供了检查计算是否完成的方法,以等待计算的完成,并可以使用get(方法获取计算的结果。

以上的面试题都已整理成册,可以关注我的公众号《老男孩的架构路》领取一线大厂Java面试题总结+各知识点学习思维导图+一份400页pdf文档的Java独家面试手册!

这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

如何查找历史线程阻塞原因_吊打面试官!Java多线程并发 108 道题,你能答对多少?...相关推荐

  1. 如何查找历史线程阻塞原因_学习 Web Worker(js中的“多线程”)

    昨天部门例会,讨论开发的系统遇到的问题,遇到一个医保上传比较耗时的问题,解决方案提到了Web Worker,学习一波. 首先简单介绍一下什么是web worker.我们都知道在浏览器中javascri ...

  2. 如何查找历史线程阻塞原因_java并发编程-线程状态,线程阻塞方式,阻塞中的线程如何终止?...

    前面的例子通过volatile boolean来让任务终止,那么如果任务阻塞了? 如何终止它?本文来看下,参考think in java . 线程的状态 1.new:线程创建后的短暂状态,其分配系统资 ...

  3. 重复订单号校验_吊打面试官系列重复消费、顺序消费、分布式事务

    你知道的越多,你不知道的越多 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难. 作为一个在互联网公司面一次拿一次Of ...

  4. qt定时器是阻塞的吗_吊打面试官 | 面试官:TCP真的可靠吗

    点击蓝字关注我哦 以下是本期干货视频视频后还附有文字版本哦 ▼<面试官:TCP真的可靠吗>▼ ps:请在WiFi环境下打开,如果有钱任性请随意 TCP真的可靠吗 面试官经常会问的一个问题是 ...

  5. redis 亿级查询速度_吊打面试官系列:Redis 性能优化的 13 条军规大全

    我的官方群点击此处. 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效 ...

  6. tomcat线程循环异常终止_腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。...

    1. 停止不了的线程 2. 判断线程是否停止状态 3. 能停止的线程--异常法 4. 在沉睡中停止 5. 能停止的线程---暴力停止 6.方法stop()与java.lang.ThreadDeath异 ...

  7. mabatisplus怎么给实体类自定义属性_吊打面试官之:当实体类中的属性名和表中的字段名不一样 ,怎么办 ?...

    第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致. <select id="selectorder" parametertype=&qu ...

  8. atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数

    点击蓝字关注我哦 以下是本期干货视频视频后还附有文字版本哦 ▼<腾讯经典考点-写代码实现atoi函数>▼ ps:请在WiFi环境下打开,如果有钱任性请随意 在腾讯面试时,经常会被问到如何用 ...

  9. vb6 判断打印机是否有效_吊打面试官 | 算法之如何判断括号是否有效?

    今天要讲的这道题是 bilibili 今年的笔试真题,也是一道关于栈的经典面试题. 经过前面文章的学习,我想很多朋友已经看出来了,我接下来要写的是一个关于「算法图解」的系列文章,中间可能会穿插少量的其 ...

最新文章

  1. Runnable接口和贪心算法
  2. 记录一次nginx升级,支持ipv4和ipv6访问https
  3. internal heap limit reached问题的解决
  4. SELECT语句小结
  5. 使用高级程序设计语言实现集合的交并差运算
  6. shared_ptrT make_shared( Args ... args );
  7. 【动态规划】分组背包 (ssl 2291)
  8. Servlet 调用过程
  9. 智能一代云平台(三十三):log4j日志研究
  10. LeetCode 96. Unique Binary Search Trees
  11. 【牛客练习44:C】小y的质数(求区间内k生互斥数对数---容斥原理+质因子分解)
  12. SMS模型格网转换为MIKE21的格网源代码
  13. 单片机程序配置成开漏输出_单片机I/O口推挽与开漏输出详解
  14. VC中画虚线矩形的方法
  15. 《信息系统安全》课后习题答案(陈萍)
  16. 不是你不懂黑盒攻击,而是你还不懂SurFree
  17. CMD命令全集(转)
  18. 游戏运营必须知道的知识(二),入行必备!!
  19. cf最新服务器录像,cf踏空跳录像文件
  20. Xshell7如何查看登录密码

热门文章

  1. python ddos 检测系统_python 检查是否存在ddos攻击
  2. mysql关联语句优化_MySql语句关联优化问题,为什么加了限制条件反而更慢?
  3. 数据库的设计与连接、站点的搭建
  4. 在英特尔架构服务器上构建基于矢量包处理(VPP)的快速网络协议栈
  5. 一张图读懂nginx多线程高并发
  6. __attribute__((weak)):弱引用,可以不实现
  7. C语言进程的内存地址空间分配
  8. python读取数据库数据、并保存为docx_Python - 爬取博客园某一目录下的随笔 - 保存为docx...
  9. android studio防止反编译,防反编译利器-Android studio混淆代码压缩apk包体积
  10. java工程师面试宝典_【Java工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网...