Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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/6/multithreading/4.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_Multithreading - Fatal编程技术网

如何从另一个线程访问线程的对象-Java

如何从另一个线程访问线程的对象-Java,java,multithreading,Java,Multithreading,我有一个扩展线程的特定类。在我的主要部分中,我创建了该类的许多线程。每个线程创建一个由我创建的类的对象 有没有一种方法可以让一个线程访问另一个线程的类Hero的对象? 我想有一种方法来比较两个不同线程的类英雄的两个对象,要么有一个方法,它可以将两个不同线程的两个对象作为参数,要么有一种方法将一个线程的对象的值传递给另一个线程。你可以做的是使扩展线程的类在其构造函数中接受类Hero的对象,如下所示: public class YourClass extends Thread{ priva

我有一个扩展线程的特定类。在我的主要部分中,我创建了该类的许多线程。每个线程创建一个由我创建的类的对象

有没有一种方法可以让一个线程访问另一个线程的类Hero的对象?
我想有一种方法来比较两个不同线程的类英雄的两个对象,要么有一个方法,它可以将两个不同线程的两个对象作为参数,要么有一种方法将一个线程的对象的值传递给另一个线程。

你可以做的是使扩展线程的类在其构造函数中接受类Hero的对象,如下所示:

public class YourClass extends Thread{
     private Hero hero;

     YourClass(Hero hero){
          this.hero= hero;           
         }
 } 
这样,您可以先创建对象并将其添加到ArrayList,然后再将引用传递给新线程对象的构造函数:

ArrayList heroes= new ArrayList<Hero>();//this should be declared at the class level
Hero hero= new Hero();
heroes.add(hero);
YourClass thread= new YourClass(hero);

Hero对象的ArrayList现在可供您的所有线程使用,您可以编写一个方法,对其进行迭代以找到您要查找的对象。你如何做到这一点很大程度上取决于你到底想做什么

所以。。。正如其他人所说,您可以将所有英雄对象放在一个静态列表、字典或其他所有人都可以访问的结构中

但对我来说,这听起来就像你试图做的实际上是创建活动对象

当您有活动对象时,每个活动对象都有自己的线程,该线程紧紧缠绕在自己的处理循环上。该循环由来自其他对象的消息队列提供

因此,每个对象都存储了对它想要与之对话的其他对象的引用,而不是对线程的引用。线程隐藏在对象内部。每个对象只向其他对象公开一个方法—QueueMessage,它将要处理的消息放在该队列上

该队列必须实现为线程安全的数据结构。在Java中,最简单的方法是使用ConcurrentLinkedQueue


闻起来像是复制品。今后,请在提问前使用搜索栏。当然,我们很乐意回答上述线程没有回答的任何问题。对象不属于线程。Java应用程序处理对象引用。只要在需要和可以访问的地方传递它们就行了。如果不能正确处理同步,共享ArrayList可能会很危险。我将使用同步块或并发包中的某些内容来重新表述您的答案。