1

我正在运行一个 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)
4

0 回答 0