Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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_Observer Pattern_Observable - Fatal编程技术网

Java 如何观察多个可观察线程

Java 如何观察多个可观察线程,java,multithreading,observer-pattern,observable,Java,Multithreading,Observer Pattern,Observable,我试图用java创建一个程序,其中线程是可观察的对象,窗口是观察者。我不明白的是,我如何区分几个线程,它们都做相同的事情,在update方法上,我可以分别更新它们在窗口上的位置。如@PeterLawrey在评论中所述,您可以使用对象中的name参数设置一个唯一的名称,然后查询线程并找到哪个线程正在做什么。建造商如下: public Thread(String name) Allocates a new Thread object. This constructor has the sam

我试图用java创建一个程序,其中线程是可观察的对象,窗口是观察者。我不明白的是,我如何区分几个线程,它们都做相同的事情,在update方法上,我可以分别更新它们在窗口上的位置。

如@PeterLawrey在评论中所述,您可以使用对象中的name参数设置一个唯一的名称,然后查询线程并找到哪个线程正在做什么。建造商如下:

public Thread(String name)
    Allocates a new Thread object. This constructor has the same effect as Thread (null, null, name).
Parameters:
    name - the name of the new thread
但是,为了在线程执行后更容易地访问线程,并且为了跟踪线程,我建议使用object。从api文档中:

线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除初始线程组外的每个线程组都有一个父线程组

因此,您可以使用该方法

哪个

将此线程组中的每个活动线程复制到指定数组中。如果recurse为true,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。如果数组太短,无法容纳所有线程,则会忽略额外的线程


和组中所有线程的
getName()
。我希望这有帮助。干杯

如@PeterLawrey在评论中所述,您可以使用对象中的name参数设置唯一的名称,然后查询您的线程并找到哪个线程正在做什么。建造商如下:

public Thread(String name)
    Allocates a new Thread object. This constructor has the same effect as Thread (null, null, name).
Parameters:
    name - the name of the new thread
但是,为了在线程执行后更容易地访问线程,并且为了跟踪线程,我建议使用object。从api文档中:

线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除初始线程组外的每个线程组都有一个父线程组

因此,您可以使用该方法

哪个

将此线程组中的每个活动线程复制到指定数组中。如果recurse为true,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。如果数组太短,无法容纳所有线程,则会忽略额外的线程


和组中所有线程的
getName()
。我希望这有帮助。喝彩< /p> < p>如果名称不够,可以考虑使用<代码>线程读取< /代码>来存储每个线程的其他信息:

class ThreadPosition {
   [ThreadStatic]
   private static int x;

   /**
   * Only call from thread.
   **/
   public static int getX()
   {
     return x;
   }
}

如果名称不够,可以考虑使用<代码>线程读取< /代码>来存储每个线程的其他信息:

class ThreadPosition {
   [ThreadStatic]
   private static int x;

   /**
   * Only call from thread.
   **/
   public static int getX()
   {
     return x;
   }
}

你可以将一个名称与每个线程关联,而不是使它们都相同,您可以将一个名称与每个线程关联。+1我建议您使用Runnable并为其指定一个名称字段。@PeterLawrey:
ThreadGroups
是否已经过时一段时间了?@Cratylus AFAIk ThreadGroups仅对应用程序服务器有用。我不使用它们,我明白。但是在更新的后面(可观察的arg0,对象arg1),我如何识别正在升级的线程?使用getName()?正如我在回答中所说:
线程组表示一组线程
。因此,您可以使用此对象跟踪线程。还有其他方法可以跟踪(并操纵它们),比如使用@PeterLawrey所说的
ExecutorService
,甚至只是创建
ArrayList
(顺便说一句,这不是一个好主意)。之后,您可以循环遍历线程对象并“询问”它们的名称和/或线程。状态+1我建议您使用Runnable并为其指定名称字段。@PeterLawrey:
ThreadGroups
是否已经过时一段时间了?@Cratylus AFAIk ThreadGroups仅对应用程序服务器有用。我不使用它们,我明白。但是在更新的后面(可观察的arg0,对象arg1),我如何识别正在升级的线程?使用getName()?正如我在回答中所说:
线程组表示一组线程
。因此,您可以使用此对象跟踪线程。还有其他方法可以跟踪(并操纵它们),比如使用@PeterLawrey所说的
ExecutorService
,甚至只是创建
ArrayList
(顺便说一句,这不是一个好主意)。之后,您可以循环遍历线程对象,并“询问”它们的名称和/或Thread.State