- 博客(19)
- 收藏
- 关注
原创 多线程代码重排序导致的问题
在多线程环境下,由于编译器优化,cpu乱序执行的情况,可能会发生指令重排序的情况。这种情况在单线程的情况下是无害的,因为它不改变程序最终的结果。但在多线程的情况下,它会导致数据不一致或者其它不可预料的情况。
2024-11-27 15:19:07
98
原创 CyclicBarrier的用法
在这个例子中,我们创建了一个 CyclicBarrier 实例,设置了参与者人数为 5,并定义了一个当所有参与者到达屏障时执行的动作(打印一条消息)。一旦所有的玩家都调用了 await 方法,那么设置的屏障动作就会被执行,之后所有玩家就可以开始跑步了。CyclicBarrier 是 Java 并发包(java.util.concurrent)中的一个同步辅助工具,它允许一组线程互相等待,直到所有线程都到达一个屏障点,然后所有线程可以继续执行。参数指定了必须同时到达这个障碍点的线程数量。
2024-11-21 13:57:54
309
原创 Java 常用函数式接口之Consumer接口
*** 对给定参数执行消费操作。* @param t 输入参数*/java.util.function.Consumer 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据, 其数据类型由泛型决定。
2023-04-04 14:15:50
672
原创 图解 SynchronousQueue
需要强调一点的是,前面说 SynchronousQueue 容量为0,不存储元素,只做取与放的交换么?可是不管是用栈的非公平模式,还是用队列的公平模式,不都是装了很多元素么,这个矛盾吧其实是这样的,像,在不存在并发的情况下,放入元素时,都能放进去。即便存在并发,拿到锁,只要有位置,就可以放进元素。但,单纯的放元素,一定是会被阻塞的,即放元素这个操作不能结束。直到有其它线程来取元素时,一放一取的情况下,两者都才能成功,操作一定是成对存在的。
2023-04-03 17:48:39
573
原创 Java的Future机制详解
B图表达的是使用Future模式之后,我们主线程在invoke之后可以立即返回,去做其他的事情,回头再来看看刚才提交的invoke有没有结果。而如果使用第二个构造函数那么最后获取线程实行结果就是参数中的result,接下来让我们看一下FutureTask的run方法。方法能准确地告诉你某个字段相对于对象的起始内存地址的字节偏移量,因为是相对偏移量,所以它其实跟某个具体对象又没什么太大关系,跟class的定义和虚拟机的内存模型的实现细节更相关。get方法有两个,一个是有超时时间设置,另一个没有超时时间设置。
2023-03-31 18:26:24
3690
原创 Weakreference
当一个对象,只被weak reference指向,而没有 strong reference指向时,如果此时发生gc,则该对象一定会被回收。
2023-03-18 18:39:32
215
原创 MySQL show processlist 执行状态分析
简单解读,数据查询和执行通常只需要不到0.01秒,而网络输出通常需要1秒左右甚至更长,原本数据连接在0.01秒即可释放,但是因为前端程序未执行close操作,直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在sleep状态!如果大量出现,内存,硬盘可能已经出现问题,比如硬盘满或损坏,或者执行正在进行清理 更新日志索引等,i/o压力过大时,也可能出现Free items执行时间较长的情况。很可怕的搜索语句会导致这样的情况,如果是数据分析,或者半夜的周期数据清理任务,偶尔出现,可以允许。
2023-03-11 12:55:30
1873
原创 Lock wait timeout exceeded; try restarting transaction详解
Lock wait timeout exceeded; try restarting transaction详解
2023-03-08 14:02:19
1971
空空如也
spingboot的读提交事务不生效
2023-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人