Hallo,
ich habe einen Thread programmiert, der ohne die deprecated-methoden auskommt. Bisher konnte ich es so veranlassen, dass der Thread gestartet, pausiert und beendet werden kann.
Ich möchte die Funktionalität dahingehend erweitern, dass nach dem Pausieren der Thread dort weitermacht, wo er aufgehört hat. Das ist u.a. notwendig, wenn in der while-Schleife eine lange Prozedur abgearbeitet wird. Bisher wird das Pausieren damit beendet, dass die while-Schleife wieder oben beginnt und neu anfängt zu arbeiten.
Würde der Prozess innerhalb der while-Schleife beispielsweise 10 Sekunden dauern und bei 5 Sekunden wird Pause ausgelöst:
Bisher wird die Pause beendet und die while-Schleife fängt oben bei 0 Sekunden wieder an.
Ziel ist es, bei 5 Sekunden die Arbeit wiederaufzunehmen.
ich habe einen Thread programmiert, der ohne die deprecated-methoden auskommt. Bisher konnte ich es so veranlassen, dass der Thread gestartet, pausiert und beendet werden kann.
Ich möchte die Funktionalität dahingehend erweitern, dass nach dem Pausieren der Thread dort weitermacht, wo er aufgehört hat. Das ist u.a. notwendig, wenn in der while-Schleife eine lange Prozedur abgearbeitet wird. Bisher wird das Pausieren damit beendet, dass die while-Schleife wieder oben beginnt und neu anfängt zu arbeiten.
Java:
public class BeendenThread1 {
static TestThread1 testThread = new TestThread1();
public static void main (String[] args)
throws InterruptedException {
testThread.start();
Thread.sleep(5500);
testThread.interrupt();
Thread.sleep(2000);
TestThread1.pausing = false;
Thread.sleep(5000);
testThread.interruptAndStop();
}
}
Java:
public class TestThread1 implements Runnable{
Thread thread = null;
public static boolean pausing;
public synchronized void start(){
if (thread == null){
thread = new Thread(this);
thread.start();
}
}
public synchronized void stop(){
if (thread != null)
thread = null;
}
public void interruptAndStop(){
interrupt();
pausing = false;
stop();
}
public synchronized void interrupt(){
pausing = true;
if (thread != null)
thread.interrupt();
}
public void sleep(){
try {
synchronized(this){
Thread.sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void pause() throws InterruptedException{
pausing = true;
while(pausing){
synchronized(this){
Thread.sleep(1000);
}
System.out.println("Thread pausiert weiter");
}
}
public void run(){
long startZeit = System.currentTimeMillis();
int i = 1;
System.out.println("Thread gestartet");
while (thread != null){
try{
Thread.sleep(1000);
System.out.println(i++);
}
catch(InterruptedException e){
System.out.println("Thread pausiert");
try {
if(pausing){
pause();
}
else {break;}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
long dauer = System.currentTimeMillis()-startZeit;
System.out.println("Thread gestoppt, Lebensdauer: "
+ dauer);
}
}
Würde der Prozess innerhalb der while-Schleife beispielsweise 10 Sekunden dauern und bei 5 Sekunden wird Pause ausgelöst:
Bisher wird die Pause beendet und die while-Schleife fängt oben bei 0 Sekunden wieder an.
Ziel ist es, bei 5 Sekunden die Arbeit wiederaufzunehmen.