小编sno*_*lli的帖子

切换操作符是原子的吗

在文档中,据说您可以if-else多次使用或者switch-case:

int condition;

setCondition(int condition) {
    this.condition = condition;
}
Run Code Online (Sandbox Code Playgroud)

交换机箱

switch (condition) {
  case 1: print("one"); break;
  case 2: print("two"); break;
Run Code Online (Sandbox Code Playgroud)

要么

if (condition == 1) { print("one"); }
else if (condition == 2) { print("two"); }
Run Code Online (Sandbox Code Playgroud)

接下来,condition声明volatilesetCondition()从多个线程调用方法. If-else不是原子和volatile变量write是同步动作.因此,"one"和"two"字符串都可以在最后一个代码中打印出来.

如果使用了一些具有初始值的方法局部变量,则可以避免:

int localCondition = condition;
if (local condition == ..) ..
Run Code Online (Sandbox Code Playgroud)

switch-case操作员是否持有一些变量的初始副本?如何用它实现交叉线程操作?

java multithreading if-statement switch-statement conditional-statements

17
推荐指数
2
解决办法
1498
查看次数

黑名单React组件

有没有办法在我的应用程序中的每个组件安装之前定义要挂钩的函数?

这个想法是,如果一个组件被列入黑名单,它根本不会安装.

该解决方案必须保持组件不被修改以便向后兼容并且应该在生产中运行(因此重新连接和其他测试工具可能不在桌面但是可以接受建议:))

//something like this...
ReactDOM.beforeEachComponentMount( (component, action) => {
    if(isBlacklisted(component)){
        action.cancelMountComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

9
推荐指数
2
解决办法
514
查看次数

如何建立实体关系

您好我正在使用jhipster生成器生成一些实体.

当我生成实体关系时,我想使该字段中的值成为强制性但不幸的是,生成器不提供该选项.

反正有没有告知发电机这种必要性?(编辑.jhipster/entity_name.json),例如?

jhipster

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

Java ScheduledExecutorService BAD Precision

您好,我已经编写了一个简单的程序来测试ScduledExecutorService.schedule()函数的精度.

测试设置延迟并检查所需延迟和有效结果之间的有效距离.

该测试已在运行Linux 3.8 x86_64的i7机器上执行,包括OpenJDK 1.7和Oracle JDK 1.7

测试的结果非常糟糕,这里有一个列表,显示假定和有效延迟之间的平均增量:


传说:

  • 睡眠(ms):所需的延迟(以毫秒为单位)
  • deltaAVG(ms):以毫秒为单位获得的所需和有效延迟之间的平均差异
  • deltaAVG_PERC:所需/有效的错误百分比
  • delta MIN/MAX:获得的所需和有效延迟之间的最小/最大差异

Sleep(ms): 0.010 deltaAVG(ms): 0.029 deltaAVG_PERC: 0289.6 % delta MIN/MAX (ms): 0.029/0.029
Sleep(ms): 0.020 deltaAVG(ms): 0.061 deltaAVG_PERC: 0299.3 % delta MIN/MAX (ms): 0.006/4.578
Sleep(ms): 0.030 deltaAVG(ms): 0.066 deltaAVG_PERC: 0221.1 % delta MIN/MAX (ms): 0.009/1.639
Sleep(ms): 0.040 deltaAVG(ms): 0.066 deltaAVG_PERC: 0165.3 % delta MIN/MAX (ms): 0.010/0.445
Sleep(ms): 0.050 deltaAVG(ms): 0.069 deltaAVG_PERC: 0138.0 % delta MIN/MAX (ms): 0.006/0.370
Sleep(ms): 0.060 deltaAVG(ms): 0.067 deltaAVG_PERC: 0111.8 …
Run Code Online (Sandbox Code Playgroud)

java time-precision scheduledexecutorservice

5
推荐指数
2
解决办法
1315
查看次数

执行请求后,MockMvc似乎很清晰SecurityContext(java.lang.IllegalArgumentException:身份验证对象不能为null)

我正在尝试使用SpringBoot + Spring Data Mongo + SpringMVC运行一些集成测试

我已经简化和通用化了代码,但是它应该能够通过以下测试重现该行为。

BookRepository界面中可以看到,我希望用户只能检索他拥有的书(@Query("{ 'ownerName' : '?#{principal?.username})),并且正在编写测试以执行POST来保存书,然后验证书的所有者是否设置正确。

出于此问题的目的,我已将测试简化为a GET,然后调用findAll()

问题

执行任何MockMvc请求后,会SecurityContext被清除,ThreadLocalSecurityContextHolderStrategy#clearContext()这会导致在我尝试调用时引发以下异常repository.findAll();

java.lang.IllegalArgumentException: Authentication object cannot be null

BookRepository.java

@RepositoryRestResource
public interface BookRepository extends MongoRepository<Book, String> {

    @Query("{ 'ownerName' : ?#{principal?.username} }")
    List<Book> findAll();  

}
Run Code Online (Sandbox Code Playgroud)

BookCustomRepositoryIntegrationTest.java

/**
 * Integrate data mongo + mvc
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class BookCustomRepositoryIntegrationTest {

    @Autowired
    BookRepository repository;

    @Autowired
    MockMvc mockMvc;  

    @Test
    @WithMockUser
    public void …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-mongodb mockmvc

4
推荐指数
2
解决办法
520
查看次数

从另一个线程修改局部变量意味着什么?

我写了以下简单的应用程序:

object Main extends App {
    var v: Int = 0
    val t = new Thread(() =>  v = 1)
    t.start()
    t.join()
    println(v) //prints 1
}
Run Code Online (Sandbox Code Playgroud)

我感到困惑的是我们从另一个线程修改局部变量......并且在主线程中可以看到该修改(由另一个线程创建).

我认为局部变量总是驻留在堆栈中(堆栈内存底部指向rsp寄存器).我认为堆栈内存是为应用程序中的每个线程分配的.

更新:即使我们按如下方式修改应用程序,它也会打印相同的内容:

object Main {
    def main(args: Array[String]) = {
        var v: Int = 0
        val t = new Thread(() =>  v = 1)
        t.start()
        t.join()
        println(v) //prints 1
    }
}
Run Code Online (Sandbox Code Playgroud)

stack multithreading jvm scala

3
推荐指数
1
解决办法
79
查看次数