小编dei*_*rus的帖子

此参考转义单线程程序

this 引用在构造过程中转义问题(Brian Goetz 和其他人在《Java 并发实践》中称为)是否影响单线程程序还是只影响多线程程序?我的意思是,如果我的类不应该是线程安全的,那么在构造过程中让 this 引用转义可以吗?

编辑:例如,这里:

public class ThisEscape {
    public ThisEscape(EventSource source) {
        source.registerListener(
            new EventListener() {
                public void onEvent(Event e) {
                    doSomething(e);
                }
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:我的问题的动机是插件 WindowBuilder for Eclipse 在 JFrame 的构造函数中创建(或似乎创建...)动作侦听器,并默认将匿名类传递给这些侦听器,从而允许 this 引用转义...

java concurrency

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

在我自己的 Eclipse 项目中“步入”

在调试我的应用程序时,直接进入程序执行周期的下一步的方法是单击“Step Into”。问题是我几乎总是在 Java 类库的类中结束,我对这些类不感兴趣,所以我通过“Step Return”摆脱了那些类。

有没有办法“进入”我的代码但跳过我没有编写的代码?

java eclipse debugging

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

在Eclipse大纲中搜索特定的返回类型

我有一个庞大的Java类,我希望能够看到所有返回的方法MyOwnDataType.我看到一个人可以做CTRL + O然后输入一些东西来打印名称与我刚给出的字符串相匹配的方法.

我发现了一个部分解决方案:如果我输入MyOwnDataType,我会得到所有返回的方法,MyOwnDataType并且有一个类型的参数MyOwnDataType.

有没有办法做到这一点(干净利落)?

java eclipse

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

中缀表达式 VHDL 中的歧义类型

我在 ModelSim 中收到以下错误:

错误:[..]/test1_toVectorAlignment_rtl.vhd(40):中缀表达式中有歧义类型;t_RAMXx8 或 ieee.std_logic_1164.STD_LOGIC_VECTOR。

ARCHITECTURE rtl OF test1_toVectorAlignment IS
type t_RAMXx8 is array (natural RANGE <>) of std_logic_vector(7 downto 0);
signal RAM28x8: t_RAMXx8(0 to 27);
BEGIN

...

    currentIq<=unsigned(RAM28x8(5)(4 downto 0) & RAM28x8(4));

...

END rtl;
Run Code Online (Sandbox Code Playgroud)

实体声明:

ENTITY test1_toVectorAlignment IS

...

    currentIq: out unsigned(12 downto 0);

...

END test1_toVectorAlignment;
Run Code Online (Sandbox Code Playgroud)

有人可以用这些信息告诉我如何解决这个问题吗?

vhdl modelsim

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

我让'this'参考逃脱了吗?(构造函数实例化中的内部类,没有事件侦听器,没有线程)

我在构造函数中实例化一个内部类,但我不是用它来启动线程或作为事件监听器.例如:

public class Something {

    final InnerSomething innerSomething = new InnerSomething();

    public Something(Param arg) {
        super(arg);
    }

    private class InnerSomething {...}

    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:我复制并粘贴了其他地方的代码,忘了删除"abstract"关键字.

EDIT2:"'this'参考转义"的"我的"定义是Java Concurrency in Practice一书中的一个.

使用上面的代码,我允许'this'引用"escape"吗?

java

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

不使用synchronized的参考类型的线程安全性

我有以下类,它应该是线程安全的:

public class ShouldBeMadeThreadSafe {

    private double[] k = {70.0,70.0}; 
    private double[] b = {10.0,10.0};
    private double[] m = {5.0,6.0};

    public synchronized void setKX(double kx) {k[0]=kx;}
    public synchronized void setKY(double ky) {k[1]=ky;}
    public synchronized void setBX(double bx) {b[0]=bx;}
    public synchronized void setBY(double by) {b[1]=by;}
    public synchronized void setMX(double mx) {m[0]=mx;}
    public synchronized void setMY(double my) {m[1]=my;}

    public double[] getK() {return Arrays.copyOf(k, k.length);}
    public double[] getB() {return Arrays.copyOf(b, b.length);}
    public double[] getM() {return Arrays.copyOf(m, m.length);}

}
Run Code Online (Sandbox Code Playgroud)

当然,这在getter中存在可见性问题,因为只有在解锁和锁定监视器之间才能保证之前发生的关系.

显而易见的解决方法是将synchronized关键字添加到getter:

public class OkButIDontLikeDeadlocks …
Run Code Online (Sandbox Code Playgroud)

java concurrency

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

Wireshark过滤器每个IP地址"不同"的东西

我想获取所有捕获的数据包,其中源或目标IP地址不同于,例如,192.168.0.1.为此我尝试了ip.addr!= 192.168.0.1,但是过滤器变黄了,而不是绿色,所以一定是错的.

怎么能(正确地)完成?

wireshark

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

Java三元运算符(?:)不起作用; 第二个或第三个操作数返回布尔值

有人能告诉我为什么三元运算符的使用不正确吗?操作数2和3返回一个布尔值.

public class Something {
...
private static final double REFERENCE_FRAME_MID_X = 0;
private static final double REFERENCE_FRAME_MID_Y = 0;

private boolean findInsideOrOutsideGeneralEllipse(Point2D destCirclePos) {
    List<Boolean> returnValue = new ArrayList<>();
    Point2D referenceFrameCenter = new Point2D.Double(REFERENCE_FRAME_MID_X, REFERENCE_FRAME_MID_Y);
    Ellipse2D insideAreaEllipse2D = getEllipse2D(referenceFrameCenter.getX(), referenceFrameCenter.getY(),
                                                    destCirclePos.distance(referenceFrameCenter));

    // doesn't work
    insideAreaEllipse2D.contains(destCirclePos) ? returnValue.add(true) : returnValue.add(false);

    // works
    if (insideAreaEllipse2D.contains(destCirclePos)) {
        returnValue.add(true);
    } else {
        returnValue.add(false);
    }
}
...
}
Run Code Online (Sandbox Code Playgroud)

java ternary-operator

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

除"synchronized"之外的Java类中的getter的线程安全习惯用法

public class ThreadSafe {

    private int aField;

    public synchronized void setAField(int value) {
        aField = value;
    }

    public synchronized int getAField() {
        return aField;
    }

}

public class ThreadSafeToo {

    private volatile int aField;

    public synchronized void setAField(int value) {
        aField = value;
    }

    public int getAField() {
        return aField;
    }

}

public class DontKnowIfThreadSafeButMostLikelyYes {

    private static int aField;

    public synchronized void setAField(int value) {
        aField = value;
    }

    public int getAField() {
        return aField;
    }

}
Run Code Online (Sandbox Code Playgroud)

问题:

  • DontKnowIfThreadSafeButMostLikely是否是线程安全的? …

java concurrency

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

避免声明局部变量

我有这个:

public void log(Circle circOrig) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我试图避免这样做:

private void addPositions(PositionsLogger positionsLogger) {
    ...
    Circle circ = new Circle(0,0,0); //`circ` could be final
    circ.setPosition(0,0);
    posLogger.log(circ);
    ...
}
Run Code Online (Sandbox Code Playgroud)

通过做这个:

public static void main(String[] args) {
    ...
    posLogger.log(new (Circle(0, 0, 0).setPosition(0, 0)));
    ...
}
Run Code Online (Sandbox Code Playgroud)

这显然是编译错误,因为log()需要a Circle而不是a void.

如何避免为这么微不足道的目的声明局部变量?

java

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