1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #2455 from WindLYLY/main

优化表达便于理解
This commit is contained in:
Guide 2024-08-15 23:44:32 +08:00 committed by GitHub
commit 557d658b7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 2 deletions

View File

@ -308,7 +308,7 @@ public ScheduledThreadPoolExecutor(int corePoolSize) {
`ThreadPoolExecutor`其他常见参数 : `ThreadPoolExecutor`其他常见参数 :
- `keepAliveTime`:线程池中的线程数量大于 `corePoolSize` 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 `keepAliveTime`才会被回收销毁。 - `keepAliveTime`:线程池中的线程数量大于 `corePoolSize` ,即有非核心线程(线程池中核心线程以外的线程)时,这些非核心线程空闲后不会立即销毁,而是会等待,直到等待的时间超过了 `keepAliveTime`才会被回收销毁。
- `unit` : `keepAliveTime` 参数的时间单位。 - `unit` : `keepAliveTime` 参数的时间单位。
- `threadFactory` :executor 创建新线程的时候会用到。 - `threadFactory` :executor 创建新线程的时候会用到。
- `handler` :拒绝策略(后面会单独详细介绍一下)。 - `handler` :拒绝策略(后面会单独详细介绍一下)。

View File

@ -61,7 +61,11 @@ Java 源代码会经历 **编译器优化重排 —> 指令并行重排 —> 内
**指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致** ,所以在多线程下,指令重排序可能会导致一些问题。 **指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致** ,所以在多线程下,指令重排序可能会导致一些问题。
编译器和处理器的指令重排序的处理方式不一样。对于编译器通过禁止特定类型的编译器重排序的方式来禁止重排序。对于处理器通过插入内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence的方式来禁止特定类型的处理器重排序。指令并行重排和内存系统重排都属于是处理器级别的指令重排序。 对于编译器优化重排和处理器的指令重排序(指令并行重排和内存系统重排都属于是处理器级别的指令重排序),处理该问题的方式不一样。
* 对于编译器,通过禁止特定类型的编译器重排序的方式来禁止重排序。
* 对于处理器通过插入内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence的方式来禁止特定类型的处理器重排序。
> 内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将主内存的值写入高速缓存,清空无效队列,从而保障变量的可见性。 > 内存屏障Memory Barrier或有时叫做内存栅栏Memory Fence是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将主内存的值写入高速缓存,清空无效队列,从而保障变量的可见性。