Java并发
文章平均质量分 80
Zephyr丶J
这个作者很懒,什么都没留下…
展开
-
LeetCode 多线程练习2(1116. 打印零与奇偶数 / H2O 生成)
多线程练习2 1116. 打印零与奇偶数 题目描述 假设有这么一个类: class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 public void zero(printNumber) { ... } // 仅打印出 0 public void even(printNumber) { ... } // 仅打印出 偶数 public void odd(printNumber) { ... } // 仅打印出原创 2021-09-06 08:21:06 · 153 阅读 · 0 评论 -
JAVA并发总览
JAVA并发总览 核心问题 并不是程序的漏洞导致的,而是操作系统底层机制导致的 原子性: 可见性问题: 改的是缓存,但是缓存对另一个线程不可见 有序性问题: 正常应该先创建对象,再赋值;而编译器对指令执行顺序出于某些原因进行了优化,然后改变了执行顺序,如下: 解决方案 可见性: 有序性: 这个原则在加了volatile和锁的时候自动生效,也就是说解决了可见性和原子性,可见性顺带就解决了 原子性: 操作系统角度,监视器的名字是管程 解决了原子性问题,可见性和有序性都能解决 并发工具 CAS的原创 2021-09-05 23:07:11 · 927 阅读 · 11 评论 -
LeetCode 多线程练习1(1114. 按序打印 / 1115. 交替打印FooBar)
多线程练习1 1114. 按序打印 题目描述 我们提供了一个类: public class Foo { public void first() { print(“first”); } public void second() { print(“second”); } public void third() { print(“third”); } } 三个不同的线程 A、B、C 将会共用一个 Foo 实例。 一个将会调用 first() 方法 一个将会调用 second() 方法 还有一个将会调用 third原创 2021-08-27 11:03:09 · 177 阅读 · 0 评论 -
Java并发
Java并发 牛客的课 基础 栈是线程私有的,有多少线程就有多少栈 这个意思就是说,操作系统执行指令是原子的,但是高级语言中的指令不一定是原子的,例如n++这个指令,在操作系统中会被拆成多条指令执行 如果不加锁的话,两个结果可能都是1,所以n++不是原子的 两个线程同步对变量X进行更改,因为一个线程更改以后另一个不会立刻看到,会造成可见性问题 CPU操作系统的机制会对程序的运行顺序进行重排,原则是保证单线程的正常运行,但是如这个例子,正常是先创建单例对象再赋值,但是这里CPU调整成先赋值,再创原创 2021-07-14 22:57:57 · 199 阅读 · 6 评论