多线程
使得每一个 CPU 的性能最大化。
向往着星星
努力做自己的太阳!
展开
-
Thread.currentThread().interrupt()
在编写完代码后,我习惯性的用IDEA的SonarLint插件检查了一遍代码。结果在我catch (InterruptedException e)的地方做了预警。原因是我没有在catch里边写Thread.currentThread().interrupt();那为什么要写这个?这是维持状态。sleep(),wait()方法抛出InterruptException异常后会清除中断标志,即把中断标志设为false。而你又捕获InterruptException并吞下它,这时你基本上阻止任何更.原创 2022-03-18 14:19:31 · 6360 阅读 · 0 评论 -
volatile
现在的 Java内存模型下,线程可以把变量保存到本地内存中,而不是直接在主内存中进行读写,这就可能造成一个线程在主内存中修改了一个变量的值,而另一个线程还继续使用它在本地内存中的变量值的拷贝,造成数据的不一致。要解决这个问题,就需要把变量声明为 volatile ,这就指示 JVM 这个变量是共享且不稳定的,每次使用它都到主内存中进行读取。所以 volatile 关键字除了防止指令重排,还有一个重要的作用就是保证变量的可见性。synchronized 关键字和 volatile 关键字的区别?sync原创 2021-03-19 12:36:27 · 62 阅读 · 0 评论 -
ThreadLocal
你了解 ThreadLocal 吗 一般情况下,我们创建的变量能够被多个线程访问和修改,如果我们想要使线程拥有自己的私有变量的话,我们就可以使用 ThreadLocal ,我们创建了 ThreadLocal 变量,当线程访问这个变量的时候,它创建这个变量的本地副本,它可以使用 get ,set 方法来获取这个本地副本变量中的值或者修改这个本地副本变量中的值,从而避免了线程安全问题。ThreadLocal 原理 ThreadLocal 是使用 ThreadLocalMap 来实现的,ThreadLo原创 2021-03-15 22:25:33 · 49 阅读 · 0 评论