Java BufferedImage.createGraphics线程安全吗?

时间:2013-02-02 03:40:57

标签: java multithreading bufferedimage

我正在运行一个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 个答案:

没有答案