mumei2018 发表于 2024-2-2 04:42:06

eclipse报错The constructor Thread(() -> {}, String) is undefined 请问怎么办?

                new Thread(()->{
                        tl.set("笑言")
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                }, "蓝色").start();
               
               
                new Thread(()->{
                        tl.set("笑言")
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                }, "绿色").start();


这段代码报错The constructor Thread(() -> {}, String) is undefined 请问是什么问题呢?

FishC 发表于 2024-2-2 04:43:30

这个问题出现的原因是Java 8引入了lambda表达式,其中的Thread构造方法需要一个Runnable对象作为参数,但你使用了lambda表达式作为参数导致报错。

解决办法是将lambda表达式封装在一个Runnable对象中,然后将该对象作为参数传递给Thread构造方法。修改代码如下:

new Thread(new Runnable(){
    @Override
    public void run(){
      tl.set("笑言");
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
    }
}, "蓝色").start();


new Thread(new Runnable(){
    @Override
    public void run(){
      tl.set("笑言");
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
      System.out.println(Thread.currentThread().getName() + ":" + tl.get());
    }
}, "绿色").start();

通过这样的修改,你应该能够成功创建并启动两个线程。记得要确保tl对象是被正确声明和初始化的。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

mumei2018 发表于 2024-2-2 05:02:08

FishC 发表于 2024-2-2 04:43
这个问题出现的原因是Java 8引入了lambda表达式,其中的Thread构造方法需要一个Runnable对象作为参数,但你 ...

我老师写的代码如下 他这样写能正常跑起来

package com.itheima;
import org.junit.juptier.api.Test;
public class ThreadLocalTest {

        @Test
        public void testThreadLocalSetAndGet() {
                ThreadLocal tl = new ThreadLocal();

                new Thread(()->{
                        tl.set("笑言");
                        System.out.println(Thread.currentThread().getName()+":"+tl.get())
                        System.out.println(Thread.currentThread().getName()+":"+tl.get())
                        System.out.println(Thread.currentThread().getName()+":"+tl.get())
                },"蓝色").start();
        }
}

下面是我的代码

package com.itheima.big_event;

import org.junit.jupiter.api.Test;

public class ThreadLocalTest {
       
        @Test
        public void testThreadLocalSteAndGet() {
               
                ThreadLocal tl = new ThreadLocal();
       
               
                new Thread(()->{                         //从这行开始报错 报错信息为 The constructor Thread(() -> {}, String) is undefined
                        tl.set("笑言")
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                        System.out.println(Thread.currentThead().getName()+":"+tl.get());
                }, "蓝色").start();

               
        }
}


我感觉我的代码和老师的代码没有什么区别为什么我的代码会报错 无法运行 而老师的代码却可以运行

FishC 发表于 2024-2-2 05:02:23

mumei2018 发表于 2024-02-02 05:02
我老师写的代码如下 他这样写能正常跑起来

packag ...

你的代码报错的原因是因为你没有导入正确的包。在你的代码中,import语句是`package com.itheima.big_event;import org.junit.jupiter.api.Test;`,而你应该导入`import org.junit.jupiter.api.Test`和`import org.junit.jupiter.api.Test`。请注意检查你的导入语句并确保导入了正确的包。修改后的代码如下:

import org.junit.jupiter.api.Test;

public class ThreadLocalTest {
    @Test
    public void testThreadLocalSetAndGet() {
      ThreadLocal<String> tl = new ThreadLocal<>();
      new Thread(() -> {
            tl.set("笑言");
            System.out.println(Thread.currentThread().getName() + ":" + tl.get());
            System.out.println(Thread.currentThread().getName() + ":" + tl.get());
            System.out.println(Thread.currentThread().getName() + ":" + tl.get());
      }, "蓝色").start();
    }
}

请确保你的代码中也正确导入了`ThreadLocal`类所在的包。这样应该能够解决你的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: eclipse报错The constructor Thread(() -> {}, String) is undefined 请问怎么办?