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

时间:2014-04-24 23:08:41

标签: java multithreading

我有一个扩展Thread的特定类。在我的主要我创建该类的一些线程。每个线程都创建一个Hero类的对象(由我创建的类)。

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

2 个答案:

答案 0 :(得分:0)

你可以做的是让扩展线程的Class在其构造函数中接受Class 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现在可用于所有线程,您可以编写一个迭代它的方法来查找您要查找的对象。你如何做到这一点很大程度上取决于你想要做什么。

答案 1 :(得分:0)

所以...正如其他人所说,你可以将所有Hero对象放在静态列表,字典或其他每个人都可以访问的结构中。

但它的声音对我来说就像你想要做的那样是创建活动对象http://en.wikipedia.org/wiki/Active_object

当你有Active对象时,每个Active Object都有自己的线程,它紧紧地缠绕在自己的处理循环上。该循环由来自其他对象的“消息”队列提供。

所以每个对象都存储对它想要与之交谈的其他对象的引用,对线程的引用。线程隐藏在对象内部。每个对象只向一个方法公开一个方法 - “QueueMessage”,它将消息放在该队列上进行处理。

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

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html