小编Pho*_*Pan的帖子

atomic/volatile/synchronized有什么区别?

原子/易失性/同步如何在内部工作?

以下代码块之间有什么区别?

代码1

private int counter;

public int getNextUniqueIndex() {
    return counter++; 
}
Run Code Online (Sandbox Code Playgroud)

代码2

private AtomicInteger counter;

public int getNextUniqueIndex() {
    return counter.getAndIncrement();
}
Run Code Online (Sandbox Code Playgroud)

代码3

private volatile int counter;

public int getNextUniqueIndex() {
    return counter++; 
}
Run Code Online (Sandbox Code Playgroud)

是否volatile以下列方式工作?是

volatile int i = 0;
void incIBy5() {
    i += 5;
}
Run Code Online (Sandbox Code Playgroud)

相当于

Integer i = 5;
void incIBy5() {
    int temp;
    synchronized(i) { temp = i }
    synchronized(i) { i = temp + 5 }
}
Run Code Online (Sandbox Code Playgroud)

我认为两个线程不能同时进入同步块...我是对的吗?如果这是真的那么如何atomic.incrementAndGet()工作没有synchronized …

java multithreading synchronization atomic volatile

282
推荐指数
4
解决办法
13万
查看次数

redux-saga-test-plan 中 testSaga 和 expectSaga 的区别

说这expectSaga是用于集成测试并且testSaga用于一般断言是否正确?

实际上,我实际上可以在所有测试中交替使用它们,所以我对何时使用哪个感到有些困惑。

reactjs redux redux-saga redux-saga-test-plan

6
推荐指数
1
解决办法
1608
查看次数

js 生成器函数中的第一个 next() 会一直执行到第一个 yield 吗?

MDN建议“当迭代器的 next() 方法被调用时,生成器函数的主体被执行直到第一个 yield 表达式”,我确实理解这个例子:

function* logGenerator() {
  console.log(0);
  console.log(1, yield);
  console.log(2, yield);
  console.log(3, yield);
}

var gen = logGenerator();

gen.next(); // 0
gen.next('pretzel'); // 1 pretzel
gen.next('california'); // 2 california
gen.next('mayonnaise'); // 3 mayonnaise
Run Code Online (Sandbox Code Playgroud)

但是,当我遇到另一个示例时,我感到困惑:

const foo = function*() {
  yield 10;
  yield 20;
};

const bar = foo();
console.log(bar.next()); // {value: 10, done: false}
Run Code Online (Sandbox Code Playgroud)

如果第一个next()第一次产生之前执行代码,则该值应该是未定义的。它是如何拿起值WITHIN第一的收益呢?我在这里有点困惑。感谢您的帮助。

javascript generator

5
推荐指数
1
解决办法
671
查看次数