![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程面试
文章平均质量分 76
丢丢diu丢
CSDN,做笔记用的……
展开
-
多线程——生产者消费者模型
多线程下生产者消费者模式1.什么是生产者—消费者模型?生产者+消费者+阻塞队列它可以用来解决:1.生产与消费速度不匹配的问题;2.软件开发过程中解耦。阻塞情况唤醒情况1.队列已满,阻塞生产者1.队列不满,唤醒生产者2.队列已空,阻塞消费者2.队列不空,唤醒消费者2.wait()/notify()实现注意:阻塞时只能用wait()方法,不能用sleep()方法,因为此时不释放锁。假设队列为空,那么消费者sleep,此时消费者不释放锁,那么生产者拿不到锁就不原创 2021-09-29 14:13:03 · 255 阅读 · 0 评论 -
ThreadLocal和Synchronized
一、ThreadLocal简介ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Threa原创 2021-09-12 00:54:58 · 1393 阅读 · 0 评论 -
线程创建的3种方式和区别
0.区别继承Thread类实现Runnable接口实现Callable接口优点:编写简单,如果需要访问当前线程,无需使用**Thread.currentThread()**方法,直接使用this,即可获得当前线程优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。优点:可以接收返回值缺点:继承了Thread类,所以不能再继承其他的父类。缺点:编程稍微复杂,如果需要访问当原创 2021-09-05 14:27:40 · 206 阅读 · 0 评论 -
多线程面试——线程池
1.什么是线程池?线程池提供了一种限制和管理资源的方式。每个线程池还维护一些基本的统计信息,例如:已完成的任务数量。2.使用线程池的好处?1.降低资源消耗:通过重复利用已经创建的线程,降低线程创建和销毁造成的消耗;2.提高响应速度:任务到达时,有时不必等待线程创建,就可以立即执行;3.提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会降低系统稳定性,使用线程池可以进行统一分配、调优和监控。3.创建线程池的参数有哪些?1.corePoolSize(核心线程数):当原创 2021-08-25 22:19:30 · 955 阅读 · 3 评论 -
力扣多线程刷题2—任意3个连续的都必须包括2个H+1个O
1117. H2O 生成1.题目分析——信号量解法每次生产h的线程先执行,每次hSema.acquire(); hSema信号量-1,同时oSema信号量+1;2次生产h之后,hSema用完,oSema增加到2,oSema.acquire(2)需要2个信号量,此时才能执行生产o,生产完oSema变为0生产1次o,之后,hSema信号量通过hSema.release(2);方法增加到2.2.代码class H2O { private Semaphore hSema = new Se原创 2021-08-16 20:51:18 · 170 阅读 · 0 评论 -
力扣多线程题目1——synchronized实现
1114. 按序打印1.题目分析无论多个线程先调用哪个方法,总是保证:first先执行、second次之、third最后;synchronized加锁,配合标志位进行实现2.代码class Foo { 1.first执行完的标志位 private boolean firstFinised = false; 2.second执行完的标志位 private boolean secondFinised = false; 3.synchronized 锁住的对原创 2021-08-15 21:51:17 · 299 阅读 · 0 评论 -
多线程面试——AQS与ReentrantLock
1.AQS1.锁原理 - 信号量 vs 管程;2.AQS 实现原理;3.AQS 源码剖析;4.如何利用 AQS 自定义一个互斥锁;基本概念互斥:即同一时刻只允许一个线程访问共享资源;同步:即线程之间如何通信、协作,一般这两大问题可以通过信号量和管程来解决。AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock),原创 2021-04-18 21:18:46 · 261 阅读 · 0 评论 -
多线程面试—锁、sychronized、ReentrantLock、AQS
1.锁互斥锁、自旋锁、读写锁,都是属于悲观锁。1.互斥锁、自旋锁——最底层的锁1.1.互斥锁1.1.1独占与加锁失败互斥锁加锁失败后,线程会释放 CPU ,给其他线程;互斥锁是一种独占锁,比如当线程 A 加锁成功后,此时互斥锁已经被线程 A 独占了,只要线程 A 没有释放手中的锁,线程 B 加锁就会失败,于是就会释放 CPU 让给其他线程,既然线程 B 释放掉了 CPU,自然线程 B 加锁的代码就会被阻塞。对于互斥锁加锁失败而阻塞的现象,是由操作系统内核实现的。当加锁失败时,内核原创 2021-04-18 21:18:26 · 437 阅读 · 0 评论 -
多线程面试——CountDownLatch,CyclicBarrier,Semaphore
0.总结1.CountDownLatch是1个线程等待其他线程,CyclicBarrier是多个线程相互等待;2.CountDownLatch是计数-1,直到减为0,CyclicBarrier是计数+1,直到达到指定值;3.CountDownLatch是一次性的,CyclicBarrier是循环使用的;4.CyclicBarrier可以在最后一个线程到达后,选择1执行1个优先操作;5.Semaphore,需要拿到锁才能执行,并且可以选择公平、非公平的模式1.CountDownLatch它是一个原创 2021-04-17 18:03:32 · 202 阅读 · 0 评论