You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1. 前者是静态方法,后者是非静态方法。interrupted 是作用于当前正在运 行的线程,isInterrupted 是作用于调用该方法的线程对象所对应的线程。(线程对象对应的线程不一定是当前运行的线程。例如我们可以在 A 线程中去调用 B 线程对象的 isInterrupted 方法,此时,当前正在运行的线程就是 A 线程。)
211
+
212
+
2. 前者会将中断状态清除而后者不会。
213
+
186
214
------
187
215
188
216
@@ -1817,4 +1845,85 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
1817
1845
1818
1846
1819
1847
1820
-
1848
+
### 网站的高并发,大流量访问怎么解决?
1849
+
1850
+
1.HTML 页面静态化
1851
+
1852
+
访问频率较高但内容变动较小,使用网站 HTML 静态化方案来优化访问速度。将社区 内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略。
无锁化编程的常用方法:硬件**CPU**同步原语CAS(Compare and Swap),如无锁栈,无锁队列(ConcurrentLinkedQueue)等等。现在 几乎所有的 CPU 指令都支持 CAS 的原子操作,X86 下对应的是 CMPXCHG 汇 编指令,处理器执行 CMPXCHG 指令是一个原子性操作。有了这个原子操作, 我们就可以用其来实现各种无锁(lock free)的数据结构。
1910
+
1911
+
CAS 实现了区别于 sychronized 同步锁的一种乐观锁,当多个线程尝试使 用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线 程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再 次尝试。CAS 有 3 个操作数,内存值 V,旧的预期值 A,要修改后的新值 B。 当且仅当预期值 A 和内存值 V 相同时,将内存值 V 修改为 B,否则什么都不做。 其实 CAS 也算是有锁操作,只不过是由 CPU 来触发,比 synchronized 性能 好的多。CAS 的关键点在于,系统在硬件层面保证了比较并交换操作的原子性, 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操 作。CAS 是非阻塞算法的一种常见实现。
1912
+
1913
+
一个线程间共享的变量,首先在主存中会保留一份,然后每个线程的工作 内存也会保留一份副本。这里说的预期值,就是线程保留的副本。当该线程从 主存中获取该变量的值后,主存中该变量可能已经被其他线程刷新了,但是该 线程工作内存中该变量却还是原来的值,这就是所谓的预期值了。当你要用 CAS 刷新该值的时候,如果发现线程工作内存和主存中不一致了,就会失败,如果 一致,就可以更新成功。
0 commit comments