Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每个线程是否需要单独的侦听器?_Java_Android_Multithreading_Listener - Fatal编程技术网

Java 每个线程是否需要单独的侦听器?

Java 每个线程是否需要单独的侦听器?,java,android,multithreading,listener,Java,Android,Multithreading,Listener,我有一个问题,我已经坚持了一天了。我正在使用线程实现一个测试。我不能在这里发布代码,因为它是机密的,但我可以给你结构: class Something{ String error = ""; Listener listener = new Listener{ onError{ error = "something"; } ... create some threads start threads 每个线程中的代码可能给出错误,也可能不给出错误,因此需要修改错误。我担心的是,如果有多个线程,

我有一个问题,我已经坚持了一天了。我正在使用线程实现一个测试。我不能在这里发布代码,因为它是机密的,但我可以给你结构:

class Something{
String error = "";
Listener listener = new Listener{
onError{
error = "something";
}
... 
create some threads
start threads

每个线程中的代码可能给出错误,也可能不给出错误,因此需要修改错误。我担心的是,如果有多个线程,它会“迷惑”侦听器

注意:侦听器不适用于线程本身(如果线程停止或诸如此类的事情,则不侦听)。侦听器是独立于线程实现的,但我确实需要它

帮助是非常感谢的。如果不清楚,可以问任何问题。

我假设“混淆侦听器”是指由于侦听器被多个线程调用而可能出现的错误。只需确保侦听器是“线程安全的”,并且可以从多个线程调用。例如,如果多个线程试图同时更改同一结构,那么与变量或结构交互而不锁定其他线程的侦听器可能会出现问题

如果该方法只处理局部变量或为并发而锁定的成员/全局变量,则不应出现问题。如果不知道无法共享的代码,就很难提供具体的建议

在线搜索Java和Android的“线程安全”,你会发现一些有用的信息。你想做的事情并不奇怪:这是常见的做法,但你必须小心。

你所说的“混淆”是什么意思,很难理解你的问题可能是什么。另外,如果您的代码是机密的,那么我和任何人都无法提供太多帮助。正如@Cheticamp所建议的,“线程安全”侦听器可以避免两个不同的线程尝试注册,同时实例化新的观察者。这可能会造成死锁。因此,代码将类似于a)创建ConcurrentHashMap,也可以使用CopyOnWriteArraySet