鱼C论坛

 找回密码
 立即注册
查看: 480|回复: 3

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

[复制链接]
发表于 2024-2-2 04:42:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
                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 请问是什么问题呢?
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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();

               
        }
}


我感觉我的代码和老师的代码没有什么区别  为什么我的代码会报错 无法运行 而老师的代码却可以运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表