自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程学习D10 收尾了应该

重点介绍java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、ConcurrentBlocking 大部分实现基于锁,并提供用来阻塞的方法CopyOnWrite 之类容器修改开销相对较重Concurrent 类型的容器内部很多操作使用 cas 优化,一般可以提供较高吞吐量弱一致性遍历时弱一致性,例如,当利用迭代器遍历时,如果容器发生修改,迭代器仍然可以继续进行 遍历,这时内容是旧的。

2024-05-09 23:09:03 1044 1

原创 多线程学习Day09

这里可以看到虽然加了锁但是读和读之间时不互斥的,那这里我有个疑问,这个锁的意义是什么呢,尽管多个读操作可以同时进行,但是一旦有线程尝试写操作,写锁将确保所有读操作已经完成,即在写锁被获取之前不允许新的读锁被获取。) 循环一次,把前驱节点的 waitStatus 改为 -1,再 for (;t3 进入 sync.releaseShared(1) 中,调用 tryReleaseShared(1) 让计数减一,这回计数为零了,进入doReleaseShared() 将头节点从 -1 改为 0 并唤醒老二,即。

2024-05-07 16:29:12 754 1

原创 多线程学习Day08

让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程池,这样能够避免饥饿,并能提升效率。

2024-05-06 22:47:37 1231

原创 多线程学习Day07

终于成功了i<5;});//任务队列//线程集合//核心线程数//获取任务的超时时间//执行任务//当任务数没有超过coreSize时,交给worker对象执行,如果超过了,加入任务队列暂存log.debug("新增worker {},{}",worker,task);}else {log.debug("加入任务队列 {}",task);@Override。

2024-05-06 17:45:54 1106

原创 多线程学习Day06

但无锁情况下,因为线程要保持运行,需要额外 CPU 的支持,CPU 在这里就好比高速跑道,没有额外的跑道,线程想高速运行也无从谈起,虽然不会进入阻塞,但由于没有分到时间片,仍然会进入可运行状态,还是会导致上下文切换。(也就是说线程数要少于CPU核心数才是靠谱的)@sun.misc.Contended 用来解决这个问题,它的原理是在使用此注解的对象或字段的前后各增加 128 字节大小的padding,从而让 CPU 将对象预读至缓存时占用不同的缓存行,这样,不会造成对方缓存行的失效。

2024-04-29 19:25:30 904

原创 多线程学习Day05-加餐

这时 CPU 可以在一个时钟周期内,同时运行五条指令的不同阶段(相当于一 条执行时间最长的复杂指令),IPC = 1,本质上,流水线技术并不能缩短单条指令的执行时间,但它变相地提高了 指令地吞吐率。happens-before 规定了对共享变量的写操作对其它线程的读操作可见,它是可见性与有序性的一套规则总结,抛开以下 happens-before 规则,JMM 并不能保证一个线程对共享变量的写,对于其它线程对该共享变量的读可见。枚举实例的创建是由Java虚拟机在类加载时处理的,这个过程是线程安全的。

2024-04-28 20:40:16 1019 1

原创 多线程学习Day05

synchronized 是那些不满足条件的线程都在一间休息室等消息而 ReentrantLock 支持多间休息室,有专门等烟的休息室、专门等早餐的休息室、唤醒时也是按休息室来唤醒。可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁,如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住。synchronized 中也有条件变量,就是我们讲原理时那个 waitSet 休息室,当条件不满足时进入 waitSet 等待。掌握 synchronized 锁对象语法。

2024-04-28 16:48:17 438 1

原创 多线程学习Day04

摆烂了两天重新启程。

2024-04-27 22:04:10 566

原创 多线程学习Day03-加餐

要点 :有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject。与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应。.即 Guarded Suspension,用在一个线程等待另一个线程的执行结果。这种模式通过简化线程间的协作和通信,能有效解决多线程程序中的复杂同步问题。JDK 中,join 的实现、Future 的实现,采用的就是此模式。消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据。一个送信的例子,写了我好久啊。

2024-04-25 21:44:01 392 2

原创 多线程学习Day03

obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法log.debug("执行....");// 让线程在obj上一直等待下去。

2024-04-25 16:54:41 878 1

原创 多线程学习Day02--加餐

根本停不下来。

2024-04-24 21:01:24 577

原创 多线程学习Day02

今天多搞一点。

2024-04-24 15:09:28 781

原创 JVM学习Day02

javap -v 字节码文件名(jar包需要使用jar -xvf解压)命令,jdk自带的反编译工具,控制台呈现字节码文件(有的时候还是非常方便的)。解析,将常量池中的符号引用替换为直接引用,符号引用是在字节码文件中使用编号来访问常量池中的内容,直接引用使用的是内存中的地址,效率当然更高。执行静态代码块中的代码,并为静态变量赋值,会执行clinit部分的字节码指令,clint中字节码指令的执行顺序和java中的编写顺序是一致的。2.类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存到方法区中。

2024-04-24 00:24:41 590

原创 JVM学习Day01

直接硬背八股实在太痛苦了,系统刷一遍吧....一张图开始。

2024-04-23 00:25:54 584 1

原创 多线程学习Day01

sleep使得线程从Running进入Timed Waiting状态(放弃时间片的使用),其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException(其实这也是为啥在写sleep的时候,一定要加异常处理的原因),睡眠结束后的线程未必会立刻得到执行,建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性(有一个时间的单位)打断正在运行的线程(其实还是由被打断的线程自己决定的)

2024-04-22 22:20:19 808

labelme2coco_single.py

labelme2coco_single.py

2023-07-20

空空如也

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

TA关注的人

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