如何将参数传递给 Java 线程?
How can I pass a parameters to a Java Thread?
我的程序无法运行,我该如何改进我的示例?
这段代码是错误的。 Eclipse 说 Cannot instantiate the type Synchro
行:Runnable threadTask = new Synchro(param1, param2);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronizuj.setEnabled(false);
String param1 = main_catalog.getText();
String param2 = copy_catalog.getText();
Runnable threadTask = new Synchro(param1, param2);
Thread newThread = new Thread (threadTask);
newThread.start();
}
});
和class Synchro
在另一个文件中:(此代码适用于 Eclipse)
public abstract class Synchro implements Runnable {
private String argument1;
private String argument2;
public void run(String argument1, String argument2) {
this.argument1 = argument1;
this.argument2 = argument2;
sleepThread();
}
我觉得你的 Synchro
class 应该是这样的。
public class Synchro implements Runnable {
private String argument1;
private String argument2;
// the arguments pass by constructor
public Synchro(String argument1, String argument2) {
this.argument1 = argument1;
this.argument2 = argument2;
}
// you have to override run method, when you implement Runnable interface
@Override
public void run() {
// your code
}
}
这是在 Java8 中工作的另一种方式:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronizuj.setEnabled(false);
final String param1 = main_catalog.getText();
final String param2 = copy_catalog.getText();
Thread newThread = new Thread (() -> {
...code to be executed in the thread goes here.
It can refer to param1 and param2,
but it can not change them...
});
newThread.start();
}
});
new Thread(...)
的参数是一个 lambda 表达式--- 一种定义和实例化实现 功能接口(注:Runnable
已经在Java8中re-defined作为功能接口。)
我的程序无法运行,我该如何改进我的示例?
这段代码是错误的。 Eclipse 说 Cannot instantiate the type Synchro
行:Runnable threadTask = new Synchro(param1, param2);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronizuj.setEnabled(false);
String param1 = main_catalog.getText();
String param2 = copy_catalog.getText();
Runnable threadTask = new Synchro(param1, param2);
Thread newThread = new Thread (threadTask);
newThread.start();
}
});
和class Synchro
在另一个文件中:(此代码适用于 Eclipse)
public abstract class Synchro implements Runnable {
private String argument1;
private String argument2;
public void run(String argument1, String argument2) {
this.argument1 = argument1;
this.argument2 = argument2;
sleepThread();
}
我觉得你的 Synchro
class 应该是这样的。
public class Synchro implements Runnable {
private String argument1;
private String argument2;
// the arguments pass by constructor
public Synchro(String argument1, String argument2) {
this.argument1 = argument1;
this.argument2 = argument2;
}
// you have to override run method, when you implement Runnable interface
@Override
public void run() {
// your code
}
}
这是在 Java8 中工作的另一种方式:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronizuj.setEnabled(false);
final String param1 = main_catalog.getText();
final String param2 = copy_catalog.getText();
Thread newThread = new Thread (() -> {
...code to be executed in the thread goes here.
It can refer to param1 and param2,
but it can not change them...
});
newThread.start();
}
});
new Thread(...)
的参数是一个 lambda 表达式--- 一种定义和实例化实现 功能接口(注:Runnable
已经在Java8中re-defined作为功能接口。)