用Swing线程安全创建图像?

时间:2012-01-23 17:03:46

标签: java multithreading swing thread-safety

我想使用this Swing snippet从非基于Swing的应用程序(使用Play Framework编写的Web服务)中的文本标签创建图像,具体而言。

我从未使用过Swing,并且看到“它不是线程安全的”。这是否适用于我计划运行的最小代码?我应该同步访问此代码吗?

如果我正确理解Swing thread-safety的答案,那么除非方法明确表示它是安全的,否则它不是......我使用的方法(特别是BufferedImage.getGraphics()似乎没有有这片javadoc)。所以,除非另有说明,否则我将同步。

2 个答案:

答案 0 :(得分:2)

“非线程安全”意味着您不能同时从多个线程访问同一个东西 在后台线程上运行该代码没有任何问题,只要您不跨线程共享对象。

请注意,大多数(非UI)对象对于只读操作是线程安全的。

答案 1 :(得分:1)

编辑:实际上,您可以删除“Swing代码段”中所有与Swing相关的部分,因为您真的只关心与Swing无关的图像处理部分。

不要担心任何事情:您的代码不是多线程的。

当你有一些实际的界面时,Swing变得复杂。接口从特殊线程(事件派发线程或EDT)运行,该线程与运行程序的主线程不同。如果您更新主程序中的某些值,则必须小心多线程问题,否则您的更新值将永远不会显示在屏幕上。

由于您只是在没有任何EDT的情况下使用Swing库中的某些方法,因此就像使用普通库中的任何方法一样。