Struts2中的一个操作是使用下面的代码:
java.util.concurrent.ExecutorService myservice = Executors.newSingleThreadExecutor();
myservice.execute(new myTask(user, "add"));
这里,myTask是实现Runnable接口的内部类。
我可以通过传递如下所示的参数来调用其他动作类中的上述代码:
java.util.concurrent.ExecutorService myservice = Executors.newSingleThreadExecutor();
myservice.execute(new myTask(user, "delete"));
在Run方法中,我会检查动作&如果它的添加,执行一些活动,如果它的更新,执行其他活动....
另外,从另一个第3个动作类,我可以通过传递另一个动作调用相同的上述线程,比如“更新”???
class myTask implements Runnable{
private User user = null;
private String action = null;
myTask(User user, String action){
this.user = user;
this.action = action;
}
public void run(){
if (action.equals("add")) {
performAdd(user);
} else if (action.equals("delete")) {
performDelete(user);
}
}
谢谢!
答案 0 :(得分:1)
否 - Runnable.run
不接受任何参数,那么您希望如何向您提供“删除”部分?
只需使用第一个表单 - 使用 all 创建Runnable
实例,使其知道需要知道的信息,以便它可以完成其工作。或者,我可能会创建Runnable
的三种不同实现 - 一种用于添加,一种用于删除,一种用于更新。如果你想做三件事之一,为什么在你可以使用多态时在执行时打开数据呢?
答案 1 :(得分:0)
如果你有很多不同的操作,你可以做这样的事情。没有多少Java开发人员知道枚举可以这种方式使用,因此可能会令人困惑。因此你应该谨慎使用它,但是当它有意义时它可以非常方便:)
enum Op {
ADD{
public void perform(Dao dao, User user){
// do stuff
}
},
UPDATE{
public void perform(Dao dao, User user){
// do stuff
}
},
DELETE{
public void perform(Dao dao, User user){
// do stuff
}
};
public abstract void perform(Dao dao);
}
class Mytask{
// [...]
public void run(){
// stuff
this.op.perform(dao, user);
// stuff
}
}
input = "ADD";
service.execute(new MyTask(Op.valueOf(input), user));
答案 2 :(得分:0)
更简单的方法是使用匿名类。
ExecutorService mySservice = Executors.newSingleThreadExecutor();
final User user =
mySservice.execute(new Runnable() {
public void run() {
performAdd(user);
}
});
// using the same myService
mySservice.execute(new Runnable() {
public void run() {
performDelete(user);
}
});