ThreadLocal 关键字和 synchronized 关键字的区别

130 阅读1分钟

在多线程中,ThreadLocal 和 synchronized 是比较常用的关键字,它们的作用都是解决线程安全问题,既然有相同作用效果,那肯定就有不同之处。

ThreadLocal 关键字:为每个线程创建一个变量副本,用于存储线程专属的数据。

synchronized 关键字:被synchronized 关键字修饰的线程,在同一时间内,只能有一个线程被执行,其他线程需要等待上一个线程时间片用完之后才能执行。

线程的时间片跟CPU上下文切换策略有关:高并发系统线程数远比CPU核心数多,而一个CPU核心在某一段时间内只能执行一个线程,于是CPU采取的策略就是为每一个线程分配时间片,当一个线程时间片用完之后就会让其他线程执行。

行为上的区别:

通过上面能很明显地看出他们的区别,ThreadLocal 关键字是通过复制多份数据避免线程之间抢占资源来保证线程安全, synchronized 关键字是通过限制线程先后执行顺序来保证线程安全。

内存与时间的区别:

ThreadLocal 关键字通过增大内存来降低多个线程执行总时间,synchronized 关键字通过增大多个线程执行总时间来降低内存。

以上内容可能存在不足或错误,如有发现请指出来。