从java applet中的非主线程调用repaint()

时间:2013-05-01 00:43:56

标签: java multithreading repaint

我有一个实现runnable的java applet类。在这个类的run()方法中,我调用了repaint()。 run方法的内容包含在无限循环中。在applet类的init()中,我使用new Thread(this).start()来启动第二个线程。我的问题是,如果从run()方法调用repaint()将指示主线程执行paint(),或者paint()将作为第二个线程的一部分执行。如果是前者,那么第二个线程是否会继续循环而不等待(如果可能)执行paint()?

1 个答案:

答案 0 :(得分:0)

从技术上讲,Event Dispatching Thread是它自己的线程,与启动applet的(主)线程分开。

重绘过程由RepaintManager安排。简短的回答基本上是,RepaintManager将安排重新发生在事件调度线程上。

直接从单独的线程调用repaint是否安全?它会认为这不是一种好的做法。

作为一个原因,我倾向于谨慎行事,只是确保与UI的所有互动并同步到EDT,无论如何。拯救了很多第二次猜测,恕我直言

我的理解是repaint通常被认为是线程安全的。但这并不意味着它将在未来继续存在。