我有一个类,Thread作为超类,我传递一个函数作为参数,这个类只执行该函数。该类使用它来创建线程,因此我可以在线程中执行任何函数,而无需创建不同的类。
public class ThreadEjecucionLambda extends Thread {
Runnable funcion;
public ThreadEjecucionLambda(Runnable funcion)
{
this.funcion=funcion;
}
public void run()
{
funcion.run();
}
}
现在,要创建同一方法的多个线程,我使用' for'阻止,例如:
for(Computer computer: Persistencia.getListComputers())
{
ThreadEjecucionLambda hilolambda=new ThreadEjecucionLambda(()->logica.EnciendeMonitor(computer.getNombrePC()));
hilolambda.run();
}
我想要达到的目的是概括前面的'所以我可以执行一个方法,我将传递给它作为参数,(在示例后面)一个'计算机'和一个功能。这种方法将执行' for'阻止并为每台计算机创建一个线程,因此我将上一个函数作为参数传递给线程,该函数将作为参数使用计算机'。 我想得到的是这样的事情(警告:它错了):
public void EjecutaHilosLambdaSegundo(ArrayList<Computer> listapcs,Runnable funcion)
{
for(Computer computer: listapcs)
{
ThreadEjecucionLambda hilolambda=new ThreadEjecucionLambda(funcion(computer));
hilolambda.run();
}
}
我希望自己能够很好地解释自己,因为这是一个非常令人困惑的问题。
答案 0 :(得分:1)
对于同步解决方案,请查看@JB Nizet answer。
异步解决方案
首先,您的ThreadEjecucionLambda
类不创建线程,因为要启动新线程,您需要调用start()
的{{1}}方法。
Thread
其次,这堂课没有意义! public class ThreadEjecucionLambda extends Thread {
Runnable funcion;
public ThreadEjecucionLambda(Runnable funcion)
{
super(funcion);
this.funcion = funcion;
}
public void run()
{
super.start();
}
}
已经在那样工作了。
第三,Thread
不接受参数。您实际需要做的是创建一个以Runnable
为参数的Runnable
。
Computer
然后将它用于上述方法。
public class MyRunnable implements Runnable {
Computer computer;
public MyRunnable(Computer computer)
{
this.computer = computer;
}
@Override
public void run()
{
// Do what you want cause a pirate is-
// Erm do what you want with your computer object
}
}