gpt4 book ai didi

java - 将监听器与线程一起使用

转载 作者:行者123 更新时间:2023-11-30 05:51:15 25 4
gpt4 key购买 nike

假设我有一个对象 Foo,它希望使用监听器接口(interface)从线程的多个正在运行的实例中获得通知。例如

界面:

public interface ThreadListener {
public void onNewData(String blabla);
}

Foo 类:

public class Foo implements ThreadListener {
public Foo() {
FooThread th1 = new FooThread();
FooThread th2 = new FooThread();
...

th1.addListener(this);
th2.addListener(this);
...

th1.start();
th2.start();
...
}

@Override
public void onNewData(String blabla) {
...
}
}

主题:

public FooThread extends Thread {
private ThreadListener listener = null;

public void addListener(ThreadListener listener) {
this.listener = listener;
}

private void informListener() {
if (listener != null) {
listener.onNewData("Hello from " + this.getName());
}
}

@Override
public void run() {
super.run();

while(true) {
informListener();
}
}
}

在最坏的情况下,onNewData(..) 被多个线程同时调用。 Foo会发生什么?会不会崩溃?

最佳答案

  • 您的 Foo 类没有状态(字段),因此除非它使用外部共享资源(例如文件...),否则它是线程安全的
  • 从构造函数启动线程通常不是一个好主意,尽管在无状态对象的情况下,我认为这很好
  • 如果 onNewData 不访问共享数据,它将按预期工作;如果可以,结果将取决于方法的实现方式。

关于java - 将监听器与线程一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com