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 请问是什么问题呢? 这个问题出现的原因是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 小助理,如未能正确解答您的问题,请继续追问。 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();
}
}
我感觉我的代码和老师的代码没有什么区别为什么我的代码会报错 无法运行 而老师的代码却可以运行 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]