自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 ThreadLocal原理(一)

了解过HashMap的话,会知道在扩容的时候存在高成本低性能的问题.因为HashMap内部是一个槽位(slot)数组,这个数组也叫哈希表,存储的是key的哈希值,当槽位数组中的元素个数超过默认容量(16)乘以加载因子(0.75)的时候会进行扩容,扩为容量为32的数组.对于每一个槽位,可以理解为桶(bucket),如果一个桶内元素超过8个,链表会变成红黑树,这是都是高性能低成本的工作.可以为每一个线程绑定一个Session(用户会话)信息,一个线程所访问的地方可以很方便的访问这个本地会话.

2024-08-02 23:41:10 550

原创 线程池的原理和使用(三)

SynchronousQueue是一个比较特殊的阻塞队列实现类.没有容量,每一个插入操作都对应着删除操作,反之每个删除操作都对应着插入操作.也就是说,提交的任务不会被保存,而是将新任务交给空闲线程执行,如果没有空闲线程就创建一个新的线程,如果线程数已经大于最大线程数,就执行拒绝策略.使用这种阻塞队列就需要把最大线程数设置的很大.而这个线程池的最大问题就在最大线程数量不设上限.如果任务提交过多会造成OOM异常,甚至因为线程过多,造成资源耗尽.

2024-08-01 20:24:21 653

原创 线程池的原理和使用(二)

Override//做日志记录等.System.out.println("任务" + r + "-getTaskCount:"//可以自己搞一个线程自己处理.这块完全可以发挥自己的想象力,比如发送mq 发送邮件其实都是可以的.

2024-07-31 23:47:23 1313

原创 线程池的原理和使用(一)

线程池的原理和使用.

2024-07-28 22:56:51 1128

原创 线程的核心原理

1分时调度模型: 系统平均分配CPU时间片,所有线程轮流占用CPU.2抢占式调度模型: 系统按照线程优先级来分配CPU时间片,优先级高的线程获取CPU执行时间相对多一些.线程的优先级Thread类里的这个属性private int priority代表线程的优先级.优先级值的范围为1-10.获取线程优先级的方法设置线程优先级的方法。

2024-07-26 00:19:21 867

原创 多线程的创建方式

看到里的话.是不是就清楚了Thread和Runnable这两种创建线程的联系.java支持类的单继承,接口是多实现.Runnable接口增强了创建线程的灵活性.拓展性也强了.(当然很官话,还是忍不住想要分享一下自己的一个感觉,虽然不一定对,但是还是很开心有所收获).最后执行的就是Runnable接口的run方法,也就是我们实现的那个方法.所以那么问题就来了,callable是怎么进行的呢.一个实现了RunnableFuture接口的FutureTask类就出现了.启到一个承上启下.

2024-07-21 11:16:18 701 1

原创 第一步开始

其实刚开始学习的时候,好多东西都仅仅局限于使用,加上好多底层根本用不到.也不用太追随版本的脚步.当然很现实的一个问题是.完全两眼一抹黑,根本不懂,这是啥.哎呦,这么高大上的技术,原来就是我们写过千百遍的try if嘛.可能有点夸张.坚持久了.看的多了.就会发现.所谓技术就是封装,通俗易懂的理解就是把计算过程封成了一个黑盒子.就像1+1=2一样.然后就是思想了.(互相借鉴)

2024-07-20 23:52:15 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除