我在抽象类中有一个代码:
public abstract class Job implements Runnable{
public void start(Integer jobId) {
try {
new Thread(this).start();
} catch (Exception e) {
e.getMessage();
}
}
}
班级代码:
public class Test extends Job {
@Override
public void run() {
for(int i = 0; i < 5; i++) {
try {
Thread.currentThread();
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("TEST");
}
}
}
主要是我:
public static void main (String[] args) throws MessagingException
{
Test test = new Test();
test.start(74);
}
那么如何将参数(jobId)从start方法传递给run()?
答案 0 :(得分:2)
在Job.start()
方法中,将值存储在成员变量中,以便稍后在线程启动时使用run()
方法访问它。
public abstract class Job implements Runnable {
protected Integer jobId;
public void start(Integer jobId) {
this.jobId = jobId;
try {
new Thread(this).start();
} catch (Exception e) {
e.getMessage();
}
}
}
public class Test extends Job {
@Override
public void run() {
System.out.println(jobId);
}
}
答案 1 :(得分:1)
您应该将其更改为构造函数参数,并将其存储在派生类的字段中。
答案 2 :(得分:1)
将jobId
作为Abstract Class的成员变量,并在start
方法中设置此变量。
现在可以在run()
方法中访问此变量。
答案 3 :(得分:0)
将构造函数的参数传递给线程:
public class MyThread implements Runnable {
public MyThread(int parameter) {
// store parameter for later user
}
public void run() {
}
}
并且这样打电话:
Runnable r = new Thread(new MyThread(param_value)).start();
答案 4 :(得分:0)
最简单的方法。但我相信这不是最好的。正如我之前所说,这是最简单的方法。 :)
public abstract class Job implements Runnable{
public void start(Integer jobId) {
try {
// passing jobID
Test.jobID = this.jobId;
new Thread(this).start();
} catch (Exception e) {
e.getMessage();
}
}
}
和其他班级一起..
public class Test extends Job {
public static Integer jobID;
@Override
public void run() {
for(int i = 0; i < 5; i++) {
try {
Thread.currentThread();
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// print jobID
System.out.println(this.jobID);
}
}
答案 5 :(得分:0)
我认为你做的事情是正确的。
只需更改
test.start(74);
在main
至
test.start(new Integer(74));
您可以在jobId
课程的start
方法中打印Job
来验证它。
如果要访问run
方法中的字段,请在“作业class and use the same in
运行”方法中定义类变量。
答案 6 :(得分:0)
我建议您重新考虑生成工作ID的方式。很可能你只需要为每个新工作提供一个唯一的id。生成该id的问题应该在您的Job类中:
public abstract class Job implements Runnable {
private static final AtomicInteger nextId = new AtomicInteger();
public final int id = nextId.getAndIncrement();
... the rest of your class's code ...
}