Java 区分线程,即使它们具有相同的名称

Java 区分线程,即使它们具有相同的名称,java,multithreading,Java,Multithreading,我创建了一个非常简单的Java游戏,包括一个玩家和随机移动的机器人。玩家可以通过按下按钮将机器人添加到地图中,从而为机器人创建新的线程 看起来是这样的 Thread newBotThread = new Thread(new Runnable(){ public void run(){ 如果我按几次按钮,就会创建几个bot,它们是否都以线程名“newBotThread”运行?我正在添加允许玩家与机器人交互的功能,有没有办法区分线程,即使它们都有相同的名称?这样我就可以

我创建了一个非常简单的Java游戏,包括一个玩家和随机移动的机器人。玩家可以通过按下按钮将机器人添加到地图中,从而为机器人创建新的线程

看起来是这样的

Thread newBotThread = new Thread(new Runnable(){

            public void run(){
如果我按几次按钮,就会创建几个bot,它们是否都以线程名“newBotThread”运行?我正在添加允许玩家与机器人交互的功能,有没有办法区分线程,即使它们都有相同的名称?这样我就可以阻止一个机器人,而其他机器人还在继续


非常感谢

简短回答:有一个方法Thread#setName(String)和一个构造函数Thread(String),用于设置线程的名称,必须在调用start()方法之前进行设置


详细回答:你很可能不应该用这个名字来控制你的机器人。我建议创建一个实现Runnable的类,该类包含go()、stop()、continue()等方法或任何您需要的方法,并且每当您创建这些类的新实例时,您都会将引用保留在某个位置(可能是Map或BotManager或其他什么),并且您可能应该使用执行器执行它们。仅凭我的意见

您可以将它们添加到
集合
,例如
数组列表

ArrayList<Thread> botThreads = new ArrayList<Thread>();
...
botThreads.add(new Thread(new Runnable(){ 
...
ArrayList botThreads=new ArrayList();
...
添加(新线程(新Runnable(){
...

当然,您应该声明
botThreads
在您的类的其他部分可以访问的地方,因此在按钮事件处理程序之外。

此代码是否在“添加bot”的事件处理程序内运行如果是这样,即使只有一个机器人,你会如何访问那个块之外的变量?我会考虑在你的游戏类中有一个字段,它是一个BOTS的集合,并且事件处理程序将线程添加到这个集合中。每个线程都有一个唯一的代码>线程。gTiDy()<代码>为什么我不能打印“thy.gTiDe())“?它说我不能从静态上下文
线程引用非静态变量。getId()
不是静态方法,您需要在实际
线程
-对象上调用它。例如
botThreads.get(0).getId()