gpt4 book ai didi

java - 将对象传递给实现 runnable 的类的目的

转载 作者:行者123 更新时间:2023-12-01 04:58:47 26 4
gpt4 key购买 nike

共有 3 类。

  1. CallMe 打印消息的基本类
  2. Caller 实现 Runnable 并从主类 Synch 获取对象
  3. Synch 主类,为 CallMe 创建对象并将其传递给 Caller 类并启动线程。

问题:在Synch类中,需要将对象传递给类Caller吗?当我尝试在没有 CallMe 对象的情况下调用类 Caller 时,编译器会抛出 NullPointerException。您能否提供此行为的任何原因。

例如:Caller ob1 = new Caller("Hello");//不使用“CallMe”类对象进行调用

以下是可供引用的工作代码。

public class CallMe {
void call(String msg) {
System.out.print("[" + msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println("]");
}
}

class Caller implements Runnable {
String msg;
CallMe target;
Thread t;

public Caller(CallMe targ, String s) {
target = targ;
msg = s;
t = new Thread(this);
t.start();
}

public void run() {
target.call(msg);
}
}

class Synch {
public static void main(String args[]) {
CallMe target = new CallMe();
Caller ob1 = new Caller(target, "Hello");
Caller ob2 = new Caller(target, "Synchronized");
Caller ob3 = new Caller(target, "World");
// wait for threads to end
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
} catch (InterruptedException e) {
System.out.println("Interrupted");
}
}
}

最佳答案

由于该行,编译器抛出 NullPointerException

target.call(msg)

如果将 null 传递给 Caller 构造函数,则实例变量 target 将设置为 null,并且您将在 null 引用上调用方法,因此会出现 NullPointerException。

至于为什么需要同时拥有“Caller”和“CallMe”类,这只是一个风格问题。这个想法是为您的代码可能包含的任何业务逻辑创建一个可运行的“包装类”。这样线程就不会绑定(bind)到项目的核心中。

关于java - 将对象传递给实现 runnable 的类的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com