Java同步问题

发布于 2024-11-27 14:44:10 字数 349 浏览 1 评论 0原文

只是寻求对某些事情的确认:

我有一个带有 Swing GUI 的服务器对象,其中包含一个由外部线程访问的方法 handle() 和另一个方法 doThis() ,它从服务器对象的 GUI 运行。

据我了解,Swing 事件处理发生在事件分派线程上,因此实际上是事件分派线程访问 doThis()

doThis()handle() 可能会产生干扰。为了避免这种情况,我应该使这两个方法同步,对吗?这将防止事件分派线程和其他外部线程在一个方法完成之前调用另一个方法。

我的推理正确吗?

Just seeking some confirmation on something:

I have a server object with Swing GUI, containing a method handle(), which is accessed by external threads, and another method doThis(), which is run from the server object's GUI.

I understand that Swing event handling takes place on the event dispatch thread, so it's actually the event dispatch thread that accesses doThis().

There is a possibility that doThis() and handle() will result in interference. To avoid that, I should make both methods synchronized right? This will prevent the event dispatch thread and the other external threads from calling one method before the other is completed.

Is my reasoning correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港小镇 2024-12-04 14:44:10

相反,请使用 SwingWorker< /a>; TwoRoot是一个简单的例子。将handle()放在后台,将doThis()放在process()中。

Instead, use SwingWorker; TwoRoot is a simple example. Put handle() in the background and doThis() in process().

完美的未来在梦里 2024-12-04 14:44:10

来自同步的 Java 教程

使这些方法同步有两个效果:首先,同一对象上的同步方法的两次调用不可能交错。当一个线程正在执行对象的同步方法时,调用同一对象的同步方法的所有其他线程都会阻塞(挂起执行),直到第一个线程完成该对象。
其次,当同步方法退出时,它会自动与同一对象的同步方法的任何后续调用建立发生之前关系。这保证了对象状态的更改对所有线程都可见。

所以是的。

From the Java tutorial on synchronization:

making these methods synchronized has two effects: First, it is not possible for two invocations of synchronized methods on the same object to interleave. When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the first thread is done with the object.
Second, when a synchronized method exits, it automatically establishes a happens-before relationship with any subsequent invocation of a synchronized method for the same object. This guarantees that changes to the state of the object are visible to all threads.

So yes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文