小编Tom*_*mas的帖子

在与中断线程的关系之前,是否在线程上调用interrupt()

换句话说,我想知道在中断线程中检测到中断时,在中断之前更改变量是否始终可见.例如

private int sharedVariable;

public static void interruptTest() {
    Thread someThread = new Thread(() -> {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // Is it here guaranteed that changes before interrupt are always visible here?
            System.out.println(sharedVariable);
        }
    });
    someThread.start();
    Thread.sleep(1000);
    sharedVariable = 10;
    someThread.interrupt();
}
Run Code Online (Sandbox Code Playgroud)

我试图找到答案在Java语言规范java.util.concurrent包的摘要页中提到的Java教程,但interrupt并没有提及.

我知道volatile和其他同步原语但我需要它们吗?

java concurrency multithreading

8
推荐指数
1
解决办法
135
查看次数

如何使用Nodejs express获取发送请求的客户端的公共IP地址?

我想使用 Nodejs express 获取客户端的公共 IP 地址。我在网上搜索了导致我使用这个问题的问题:

var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
    console.log(ip)
Run Code Online (Sandbox Code Playgroud)

但是,在我的控制台中,我得到

::ffff:192.168.1.2

这是我的本地 IP 地址而不是公共 IP 地址

node.js express

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

如何说服借用检查员不再使用借用的参考

我正在寻找一种方法,如何说服借用检查人员以下代码是安全的。

情况

SliceHolder是一个结构,我无法更改它的接口(不同的库)。我想在 中临时设置切片SliceHolder,调用一些方法来处理数据,然后完成借用(停止借用切片)。我的问题是,借阅检查器不允许我这样做。如果我添加到接口foo where 'a: 'b借用检查器将失败,self.slice = slice;因为输入切片无法存储(即使是临时的)到结构中,寿命将更长(至少我认为这是原因)。如果我更改为where 'b: 'a借用检查器将失败x[0] = 5,因为它认为该切片的借用时间比 SliceHolder 的生命周期长。

我只是想临时使用切片的引用,并在函数foo结束时以某种方式释放该引用,以便借用检查器不会将引用视为已使用。为此,我使用了self.slice = &DEFAULT;应该说服slice不再存储在内部的借用检查器SliceHolder,但这不起作用。

我已经找到了不安全和原始指针(self.slice = unsafe {&*(slice as *const [u8])};)的解决方案,但我认为这不是解决 Rust 中这个问题的正确方法。

代码

struct SliceHolder<'a> {
    slice: &'a [u8],
}

const DEFAULT: [u8; 0] = [];

impl<'a> SliceHolder<'a> {
    fn foo<'b>(&mut self, slice: &'b [u8]) -> Vec<u8> {
        self.slice = slice; // FIRST POSITION …
Run Code Online (Sandbox Code Playgroud)

rust

0
推荐指数
1
解决办法
364
查看次数

标签 统计

concurrency ×1

express ×1

java ×1

multithreading ×1

node.js ×1

rust ×1