多线程Java BuffereImage。createGraphics线程安全?
我正在运行一个web服务器,它可以检索图像并对其进行一些操作。单元测试中一切正常,但今天web服务器没有响应,在执行线程转储时,我看到许多被阻止的线程具有以下堆栈跟踪:
sun.java2d.SunGraphicsEnvironment.createGraphics(java.awt.image.BufferedImage) @bci=19, li
ne=181 (Compiled frame)
- sun.java2d.HeadlessGraphicsEnvironment.createGraphics(java.awt.image.BufferedImage) @bci=5, line=89 (Compiled frame)
- java.awt.image.BufferedImage.createGraphics() @bci=6, line=1154 (Compiled frame)
- (my package).getScaledInstance(java.awt.image.BufferedImage, int, int, java.lang.Object, boolean) @bci=113, line=120 (Compiled frame)
它被卡住的代码行是:
BufferedImage tmp = new BufferedImage(w, h, type);
Graphics2D g2 = tmp.createGraphics();
createGraphics线程安全吗?我在官方的javadocs中找不到任何说明它不是的文档,但它看起来确实是这样的(考虑到它是基于AWT的,如果不是的话,也就不足为奇了)。还有什么东西会导致线程像这样阻塞吗
编辑:应该补充一点,我运行的是Amazon EC2 Linux ami(默认版本),运行的是最新版本的java
java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
共 (0) 个答案