2023年1月23日

ThreadLocal原理

摘要: ThreadLocal含义 ThreadLocal线程本地变量把变量与线程绑定在一起,为每一个线程维护一个独立的变量副本(因为是对象引用,堆中的对象是线程间共享的,所以ThreadLocal没有解决线程安全问题),在本线程内随时可取。而ThreadLocal实例通常是private static类型 阅读全文

posted @ 2023-01-23 14:04 王景迁 阅读(72) 评论(0) 推荐(0) 编辑

2023年1月22日

synchronized加锁对象和JVM对锁的优化

摘要: synchronized加锁对象 对于普通同步方法,锁是调用该方法的对象。对于静态同步方法,锁是该方法所属类的Class对象。对于同步代码块,锁是synchronized括号里面的对象。 JVM对锁的优化 偏向锁 如果一个线程获得锁,那么锁就进入偏向模式。当这个线程再次请求锁时,不执行同步操作。 轻 阅读全文

posted @ 2023-01-22 16:05 王景迁 阅读(33) 评论(0) 推荐(0) 编辑

Java创建线程的4种方式

摘要: 继承Thread类,重写run方法 Thread类实现了Runnable接口(只有一个没有返回值的run方法)。 public class ThreadDemo extends Thread { public ThreadDemo(String name) { super(name); } @Ove 阅读全文

posted @ 2023-01-22 15:56 王景迁 阅读(64) 评论(0) 推荐(0) 编辑

2023年1月21日

go mod

摘要: 创建go.mod 在当前目录下生成一个go.mod文件 go mod init xxx(目录名称) 使用go mod管理项目,不需要把项目放到GOPATH目录下,可以在任何位置新建一个项目。go.mod所在的目录为一个模块。编译运行项目后,项目目录下多出了一个文件go.sum。go.sum是记录所依 阅读全文

posted @ 2023-01-21 20:51 王景迁 阅读(166) 评论(0) 推荐(0) 编辑

go内存逃逸

摘要: 逃逸分析 go在编译时确定是否逃逸,逃逸分析是编译器决定变量分配到栈上还是堆上的一种行为。 查看逃逸分析日志:go build -gcflags=-m其中,-m打印出逃逸分析的优化策略。 指针逃逸 函数局部变量优先分配到栈上。如果编译器不能确保变量在函数return之后不再被引用,那么编译器就会将变 阅读全文

posted @ 2023-01-21 20:40 王景迁 阅读(46) 评论(0) 推荐(0) 编辑

go检测命令

摘要: map并发读写场景未加锁 package main import "time" func main() { m := make(map[int]int) go func() { for i := 0; i < 10000; i++ { m[0] = 1 } }() go func() { for i 阅读全文

posted @ 2023-01-21 19:52 王景迁 阅读(11) 评论(0) 推荐(0) 编辑

go RWMutex源码分析

摘要: 适用场景 并发场景下读多写少。 字段含义 RWMutex基于Mutex,写优先,Lock函数(反转readerCount)会阻止新的reader获取锁。 type RWMutex struct { w Mutex // writer之间互斥 writerSem uint32 // writer信号量 阅读全文

posted @ 2023-01-21 19:30 王景迁 阅读(51) 评论(0) 推荐(0) 编辑

go sync.Once源码分析

摘要: 适用场景 服务启动时读取全局配置。单个函数流程里面只调用一次。 源码 双重检查done值是0后,加锁执行指定函数并把done值改成1。 type Once struct { done uint32 m Mutex } func (o *Once) Do(f func()) { if atomic.L 阅读全文

posted @ 2023-01-21 17:43 王景迁 阅读(17) 评论(0) 推荐(0) 编辑

go WaitGroup源码分析

摘要: 适用场景 等待若干个任务执行完成。 实现原理 字段 type WaitGroup struct { 省略 // 存储waiter数、WaitGroup计数和信号量 state1 [3]uint32 } 添加任务Add函数 设置WaitGroup计数 func (wg *WaitGroup) Add( 阅读全文

posted @ 2023-01-21 16:20 王景迁 阅读(17) 评论(0) 推荐(0) 编辑

go Channel源码分析

摘要: 理论基础 不要通过共享内存来通信,要通过通信来共享内存。 特点 通道分为非缓冲通道和缓冲通道。单向通道由双向通道转换而来,但是单向通道不能转换回双向通道。 通过make来初始化一个chan,未初始化的chan的零值是nil。 接收数据时,返回两个值。第一个值是返回的chan中的元素,第二个值是boo 阅读全文

posted @ 2023-01-21 09:59 王景迁 阅读(49) 评论(0) 推荐(0) 编辑

导航