![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线程
文章平均质量分 70
放肆!
学习
展开
-
线程池的基本了解
线程池: 线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。 使用线程池的好处: 降低线程创建和销毁线程而产生的系统开销; 提高相应速度,创建相对从线程池里面取速度较快; 提高线程的可管理性: 常用的线程池有哪些: newFixedThreadPool:创建固定大小(线程个数)的线程池 newSingleThreadPool:创建单线程的线程池 newscheduleThreadPool:创建具有时间的线程池 newCacheThreadPool:创原创 2021-06-06 20:46:55 · 83 阅读 · 0 评论 -
ThreadLocal基本了解
ThreadLocal 解决的问题: 主要解决的是数据隔离,在多线程的情况下防止自己的变量被修改 。见名知意本地线程,也就是说每个线程都会在ThreadLocal中存放一份属于自己独有的数据,所以它是线程安全的。 相当于Web的域对象,session的作用域是一个会话,而ThreadLocal的作用域就是基本线程。 基本数据结构: ThreadLocal底层是通过ThreadLocalMap静态内部类实现的,这个ThreadLocalMap就是一个KV的Map集合,底层是一个Entry对象数组,Entry对原创 2021-05-29 15:10:06 · 311 阅读 · 0 评论 -
AQS:AbstractQueuedSynchronizer :同步队列器
AQS:AbstractQueuedSynchronizer :同步队列器 AQS中维护了一个int 的变量代表共享资源 和一个FIFO线程等待队列,多线程进行资源争抢会被阻塞进入此队列。 队列把它叫做同步等待队列,这个队列的作用是将想要得到这个锁的线程进行保存起来,当获取了资源就进行执行 基于AQS有一个同步组件,叫做ReentrantLock,在这个组件里,state代表获取锁的线程数,Volatile int state 代表共享资源,使用Volatile修饰,保证多线程下的可见性,当state为原创 2021-05-29 11:41:47 · 145 阅读 · 0 评论 -
volatile细节
volatile细节: /** 使用volatile和不使用volatile volatile保证不同线程对共享变量操作的可见性,也就是说一个线程修改了volatile修饰的变量,当修改写回主内存时,另外一个线程立即看到最新的值。 */ public class Volatile { /*volatile*/ boolean running = true; void m() { System.out.println("m start"); while (run原创 2021-05-22 19:21:46 · 87 阅读 · 1 评论 -
乐观锁和悲观锁
乐观锁和悲观锁: CAS:Compare And Swap 比较和替换 是乐观锁的一种 是一种轻量级锁,在java的JUC中很多工具类的时效件都基于CAS的; CAS保证线程安全的方法: 线程在读取数据时候不进行加锁,在准备写会数据的时候先去查询原值,操作的时候比较原始是否被修改,若未被其他先修改则写回,若已被修改,则重新执行读取流程。 存在的问题:ABA问题: 线程1进行读数据A,但是操作时间长没写回数据; 线程2进行读数据A; 然后线程2进行CAS对比原来还是A,可以修改为B; 线程3进行原创 2021-05-22 19:12:13 · 128 阅读 · 0 评论 -
yield方法和wait方法
yield方法和wait方法 yield()方法属于高风亮节方法,可以调用跟自己同级的线程 也不会释放锁 wait()方法是Object对象的方法,使用时候调用对象的wait方法导致当前对象放弃对象的锁,只有调用notify方法或者notifyAll方法才会唤醒 。会释放锁 join对象也可以 sleep()方法是休眠方法,是Thread类的静态方法,调用时不会释放锁。 通俗的说法就是一般抱着锁睡觉。 成员变量放在heap堆区 局部变量放在栈区 堆区:只存放类对象,线程共享 方法区:又叫静态存储区原创 2021-05-08 10:07:09 · 604 阅读 · 0 评论 -
synchronized关键字和volatile关键字比较
synchronized关键字和volatile关键字比较: volatile关键字是线程同步的轻量级实现,所以volatile性能要比synchronized关键字要好。但是volatile关键字只能用作于变量而synchronized关键字可以修饰代码块以及方法。 synchronized关键字在JDK1.6以后进行了性能提升:减少获取释放锁的消耗,进入轻量级锁和偏向锁。实际开发中使用还是比较多的。 多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞。 vol原创 2021-05-03 15:27:22 · 154 阅读 · 0 评论 -
线程相关问题
线程相关问题(一)附答案 什么是BIO和NIO? BIO是Blocking I/O,同步阻塞I/O模式;数据的读写在一个线程里进行操作,在连接数小的情况下,这种模式是比较不错的,可以让每一个连接专注自己的I/O且编程模式简单,不需要考虑其他的限流、过载等问题,适用于低并发的应用。 NIO是NO-Blacking或New I/O,非同步阻塞的I/O模型;并且是面向缓存的,基于通道的I/O的方法,适用于高并发的应用。 线程的基本状态是什么? 线程的基本状态分为六大种 NEW:新建线程,未使用sta原创 2021-03-30 20:39:57 · 70 阅读 · 0 评论