我想使用this Swing snippet从非基于Swing的应用程序(使用Play Framework编写的Web服务)中的文本标签创建图像,具体而言。
我从未使用过Swing,并且看到“它不是线程安全的”。这是否适用于我计划运行的最小代码?我应该同步访问此代码吗?
如果我正确理解Swing thread-safety的答案,那么除非方法明确表示它是安全的,否则它不是......我使用的方法(特别是BufferedImage.getGraphics()
似乎没有有这片javadoc)。所以,除非另有说明,否则我将同步。
答案 0 :(得分:2)
“非线程安全”意味着您不能同时从多个线程访问同一个东西 在后台线程上运行该代码没有任何问题,只要您不跨线程共享对象。
请注意,大多数(非UI)对象对于只读操作是线程安全的。
答案 1 :(得分:1)
编辑:实际上,您可以删除“Swing代码段”中所有与Swing相关的部分,因为您真的只关心与Swing无关的图像处理部分。
不要担心任何事情:您的代码不是多线程的。
当你有一些实际的界面时,Swing变得复杂。接口从特殊线程(事件派发线程或EDT)运行,该线程与运行程序的主线程不同。如果您更新主程序中的某些值,则必须小心多线程问题,否则您的更新值将永远不会显示在屏幕上。
由于您只是在没有任何EDT的情况下使用Swing库中的某些方法,因此就像使用普通库中的任何方法一样。