gpt4 book ai didi

java - 这段代码不是线程安全的吗?

转载 作者:行者123 更新时间:2023-12-02 06:10:39 28 4
gpt4 key购买 nike

我有一个使用 JCGM API 读取图像的静态方法。

public static BufferedImage readBlackAndWhite(final ImageInputStream pIntputstream,
Dimension pDim) throws IOException {
ImageReaderSpi lCgmImageReaderSpi = new CGMImageReaderSpi();
CGMImageReader lReader = new CGMImageReader(lCgmImageReaderSpi);
lReader.setBlackAndWhite(true);
lReader.setInput(pIntputstream);
return lReader.read(0, pDim.width, pDim.height);
}

我认为这不是线程安全的。因为这个方法是静态的并且 pIntputstreampDim在多线程环境下会出现问题。

在方法定义中添加synchronized将使其线程安全。但会降低性能

我想知道使该方法线程安全的其他最佳方法是什么。牢记性能?

最佳答案

如果您保证以下几点,您的代码就是线程安全的:

1)您的流不与其他线程共享(流很少是线程安全的 - 它们期望由单个线程处理)

2) 您的 Dimension 对象是: a) 不可变 b) 不与任何其他线程共享 c)​​ 线程安全 d) 有效不可变 - 意味着其他线程可能操纵它,但随后以安全的方式为其他线程发布它使用,此后没有发生任何状态修改。

3) CGMImageReaderSpi 和 CGMImageReader 的构造函数以及 ImageInputStream 的 read 方法不会干扰与其他线程共享的一些状态变量。

或者,如果上述一个或多个不成立,如果代码始终以互斥方式执行,使用某种类型的锁(例如同步块(synchronized block)),则代码仍然可以是线程安全的。

关于java - 这段代码不是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21926610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com