小编are*_*naq的帖子

Java同步方法

考虑以下代码:

public synchronized void onSignalsTimeout(List<SignalSpec> specs) {
    if (specs != null && specs.size() > 0) {
        for (SignalSpec spec : specs) {
            ParsedCANSignal timeoutedSignal = new ParsedCANSignal();
            SignalsProvider.getInstance().setSignal(spec.name, spec.parent.parent.channel, timeoutedSignal);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个简单的问题:当线程1调用onSignalsTimeout方法时,线程2可以访问在该方法中访问的对象吗?

如果'synchronized'锁只能访问此方法或访问此方法中使用的所有对象,则无法找到任何位置.

java multithreading android deadlock thread-safety

40
推荐指数
3
解决办法
4万
查看次数

为什么vim在打开文件后将第一个字母改为g

当我打开文件时,例如vim .bashrc,vim打开文件并将第一个字母更改为g.我看到的是以下内容:

g To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
...
Run Code Online (Sandbox Code Playgroud)

我改g回来#,但在加载文件后,它又改变了.发生多个文件.

我做的最后一件事是:installig gccmake.

为什么会这样?

编辑:我的.vimrc文件:

set nocompatible
set backspace=indent,eol,start
set number
set tabstop=4
syntax on
Run Code Online (Sandbox Code Playgroud)

vim bash cygwin .bash-profile

20
推荐指数
5
解决办法
4651
查看次数

如何测试存储在double中的值是否合适?(舍入是,但截断否)

我认为这个问题很简单.但这是一个例子.

以下示例正常.我可以进行四舍五入,这里没有截断.

public static void main(String[] args) {
    double d = 9.9;
    long l = (long)d;
    System.out.println(l);
}
Run Code Online (Sandbox Code Playgroud)

输出:

9
Run Code Online (Sandbox Code Playgroud)

现在数字超出了长期范围:

public static void main(String[] args) {
    double d = 99999999999999999999999999999999.9;
    long l = (long)d;
    System.out.println(l);
}
Run Code Online (Sandbox Code Playgroud)

输出:

9223372036854775807
Run Code Online (Sandbox Code Playgroud)

这个让我烦恼.我不能继续使用完全不同的数字.我宁愿得到错误或异常.

有没有办法在Java中检测到这个?

java double casting truncate long-integer

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

Android 支持库中的 ActionBar#setDefaultDisplayHomeAsUpEnabled 是什么?

我知道有什么setDisplayHomeAsUpEnabled作用,但setDefaultDisplayHomeAsUpEnabled我只能想知道什么是为了。没有找到文档,除了正在使用之外找不到任何东西。

android android-actionbar android-support-library

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

如何在BASH中将两个字符作为小数进行XOR

我需要对两个字符执行XOR。我得到了这个功能,但是它不会打印出我期望的:

#!/bin/sh

xor() {
    key=$1
    length=${#key}
    while read -r -N1 byte
    do
        char=${key:$((i % length)):1}
        echo $((byte ^ char))
    done
}

echo "5555" | xor "4567"
Run Code Online (Sandbox Code Playgroud)

输出:

1
1
1
1
4
Run Code Online (Sandbox Code Playgroud)

我希望带有掩码4567的输入5555能够看到输出:

1
0
3
2
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:所以我改变了我的功能:

xor() {
    key=$1
    length=${#key}
    i=0
    while read -r -N1 byte
    do
        char=${key:$((i % length)):1}
        ((i++))
        echo $((byte ^ char))
    done
}
Run Code Online (Sandbox Code Playgroud)

尝试致电时仍然出现错误:

cat $2 | xor $1
Run Code Online (Sandbox Code Playgroud)

// $ 1是键,$ 2是文件名

作为文件,我使用标准文本文件,并使用字符串作为键。它说在行echo $((byte ^ char))< 上有错误:语法错误:期望操作数(错误的标记是“ <”)

unix bash shell char xor

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