Java 如何观察多个可观察线程
我试图用java创建一个程序,其中线程是可观察的对象,窗口是观察者。我不明白的是,我如何区分几个线程,它们都做相同的事情,在update方法上,我可以分别更新它们在窗口上的位置。如@PeterLawrey在评论中所述,您可以使用对象中的name参数设置一个唯一的名称,然后查询线程并找到哪个线程正在做什么。建造商如下: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
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