Es ist ein RMI-Server-Objekt, so dass viele sethumanActivity() ausgeführt werden kann, wie stelle ich sicher, dass der vorherige changeToFalse-Thread gestoppt oder angehalten wird, bevor das neue changeToFalse ausgeführt wird? t. interrupt
?Wie starte ich einen Thread?
Grundsätzlich, wenn sethumanActivity() aufgerufen wird, wird die humanActivity auf True festgelegt, aber ein Thread wird ausgeführt, um es auf false zurückzusetzen. Aber ich denke darüber nach, wie man den Thread deaktiviert oder killt, wenn eine andere sethumanActivity() aufgerufen wird?
public class VitaminDEngine implements VitaminD {
public boolean humanActivity = false;
changeToFalse cf = new changeToFalse();
Thread t = new Thread(cf);
private class changeToFalse implements Runnable{
@Override
public void run() {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
humanActivity = false;
}
}
@Override
public void sethumanActivity() throws RemoteException {
// TODO Auto-generated method stub
humanActivity = true;
t.start();
}
public boolean gethumanActivity() throws RemoteException {
// TODO Auto-generated method stub
return humanActivity;
}
}
Herausgegeben nach Hilfe SOER
package smartOfficeJava;
import java.rmi.RemoteException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class VitaminDEngine implements VitaminD {
public volatile boolean humanActivity = false;
changeToFalse cf = new changeToFalse();
ExecutorService service = Executors.newSingleThreadExecutor();
private class changeToFalse implements Runnable{
@Override
public void run() {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
humanActivity = false;
}
}
@Override
public synchronized void sethumanActivity() throws RemoteException {
humanActivity = true;
service.submit(cf);
}
public synchronized boolean gethumanActivity() throws RemoteException {
return humanActivity;
}
}
bearbeitet, ist es schon sicher? – wizztjh
Ja! Die Deklaration von humanActivity volatile stellt jetzt sicher, dass alle Lesevorgänge den aktuellsten Wert anzeigen. –