汪的爱琪 2023-08-26 12:43 采纳率: 67.5%
浏览 2
已结题

java线程Callable问题

我想输出原神,启动和王者,启动但是我的控制台输出确是main启动,

img

代码如下


import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

class CallableClass implements Callable<Object> {
    @Override
    public Object call() throws Exception {
        return "null";
    }
}
class Demo4{
    public static void main(String[] args) {
        CallableClass c1 = new CallableClass();
        FutureTask<Object> futureTask = new FutureTask<>(c1);
        Thread thread = new Thread(futureTask,"原神");
        thread.start();
        System.out.println(Thread.currentThread().getName()+"启动!");
        FutureTask<Object> futureTask1 = new FutureTask<>(c1);
        Thread thread1 = new Thread(futureTask1,"王者");
        thread1.start();
        System.out.println(Thread.currentThread().getName()+"启动!");
    }
}

有人能讲讲怎么回事吗?我是根据Runnable学的将对象添加到Thread的构造方法里就能够为这个线程起一个名字,类似于这样

class RunnableClass implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"执行!");
    }
}
class Demo3{


    public static void main(String[] args) {
        RunnableClass runnableClass= new RunnableClass();
        //使用Thread的构造方法创建对象
        Thread thread = new Thread(runnableClass,"thread666");
        thread.start();
    }
}


控制台输出

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-26 13:12
    关注

    引用 皆我百晓生 小程序回复内容作答:

    在Java中,为线程设置名称有两种常用方法:

    1. 通过继承Thread类并重写run()方法,然后使用Thread类的构造方法为线程设置名称,例如:
    class MyThread extends Thread {
        public MyThread() {
            super("线程名称");
        }
      
        public void run() {
            System.out.println(getName() + "执行");
        }
    }
    
    1. 实现Runnable接口,在实例化Thread对象时为其传入Runnable实例,并使用Thread类的构造方法为线程设置名称,例如:
    class MyRunnable implements Runnable {
        public void run() {
            System.out.println(Thread.currentThread().getName() + "执行");
        }
    }
    
    public class Demo {
        public static void main(String[] args) {
            MyRunnable myRunnable = new MyRunnable();
            Thread thread = new Thread(myRunnable, "线程名称");
            thread.start();
        }
    }
    

    在你的第一个代码示例中,你使用了CallableFutureTask来实现线程,这两个类没有直接提供设置线程名称的方法。因此,无法通过这种方法来为线程设置名称。线程的名称将默认为Thread-X,其中X是一个整数。

    所以,在你的第一个代码示例中,输出的线程名称实际上是由底层JVM分配的默认线程名称。因此,无论你将Thread对象命名为什么,都无法将它们输出为你所期望的名字。

    只有继承Thread类或使用Runnable接口创建线程时,你才能够通过设置线程名称的方式来命名线程。

    希望能帮助你理解这个问题。如果你还有其他疑问,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月28日
  • 已采纳回答 8月28日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)