UnknownUser (09.05.2014)
-
09.05.2014, 16:06 #1
main-Methode und Tread parallel ausführen
Hey,
Ich habe mir, um das Thema Threads zu lernen, ein Programm geschrieben, dass bei Drücken der Eingabetaste anfängt sekündlich die aktuelle Zeit auszugeben.
Wenn ich wieder die Eingabetaste drücke soll es damit aufhören.
Mein Problem ist jetzt das der Thread damit anfängt die Zeit auszugeben, aber nichtmehr damit aufhört da meine main-Methode nicht weiter ausgeführt wird oder auf mein "t1.interrupt" nicht reagiert. Ich weis es nicht wirklich.
Daher meine Frage wie kriege ich es hin das ich meine Thread wieder anhalten kann.
import Prog1Tools.*;
import java.util.*;
public class ZeitStoppen {
public static void main(String[] args) {
Threads t1 = new Threads();
//Threads t2 = new Threads();
IOTools.readLine("Eingabetaste drücken für ersten Thread");
Date start1 = new Date();
t1.start(start1, t1);
/*IOTools.readLine("Eingabetaste drücken für zweiten Thread");
t2.start();
Date start2 = new Date();*/
IOTools.readLine("Eingabetaste drücken zum Anhalten");
t1.interrupt();
Date stopp1 = new Date();
System.out.println(stopp1);
/*IOTools.readLine("Für Anhalten Eingabetaste drücken");
t2.interrupt();
Date stopp2 = new Date();
System.out.println(stopp2);*/
}
public static class Threads extends Thread{
private Date start1;
//private Date stopp1;
private Threads t1;
public void start(Date start1, Threads t1) {
this.start1 = start1;
//this.stopp1 = stopp1;
this.t1 = t1;
run();
}
public void run() {
while(t1.isInterrupted() == false) {
String b = Thread.currentThread().getName();
System.out.println(""+ b + start1);
start1 = new Date();
try {
sleep(1000);
}catch (InterruptedException e) {
}
//IOTools.readLine("Eingabetaste für Anhalten");
//t1.interrupt();
//System.out.println(stopp1);
}
}
}
}
Danke schonmal!
EDIT by DMW007: Beitrag ediert, bitte Sourcecode zukünftig direkt im jeweiligen BB-Code in den Thread posten, z.B. [java] für Java.
-
09.05.2014, 16:26 #2
AW: main-Methode und Tread parallel ausführen
Du brauchst zwei Threads.
Der erste wartet auf Eingaben und der zweite gibt die aktuelle Zeit aus.
EDIT:
import java.util.Scanner;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.io.PrintWriter;
public class ThreadsDemo {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
final Thread timeThread = new Thread(new TimePrinter());
Thread inputThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (scanner.next().equals("a")) {
timeThread.start();
} else {
timeThread.stop(); // evil
break;
}
}
}
});
inputThread.start();
}
}
// Can be used as "normal" class or can be committed to a thread instance
class TimePrinter implements Runnable {
public static final PrintWriter defaultOut = new PrintWriter(System.out);
private static final SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss");
private final long msDelay;
public TimePrinter() {
this.msDelay = 1000;
}
public TimePrinter(long msDelay) {
this.msDelay = msDelay;
}
@Override
public void run() {
while (true) {
printTime(defaultOut);
try {
Thread.sleep(msDelay);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
public synchronized void printTime(PrintWriter writer) {
writer.println(dateFormatter.format(Calendar.getInstance().getTime()));
writer.flush();
}
}
Geändert von Nuebel (09.05.2014 um 17:30 Uhr)
-
The Following User Says Thank You to Nuebel For This Useful Post:
Ähnliche Themen
-
Lottozahlen - Auswertung , Methode hängt
Von !lkay im Forum JavaAntworten: 3Letzter Beitrag: 17.03.2014, 15:20 -
C# Methode "im Hintergrund" ausführen
Von Snees im Forum .NetAntworten: 8Letzter Beitrag: 08.03.2013, 02:38 -
Paysafekarte Auscash Methode!
Von Jack DanieLs im Forum Internet und TechnikAntworten: 11Letzter Beitrag: 07.10.2012, 10:17 -
.htpasswd Methode
Von Kuchenmaster im Forum Internet und TechnikAntworten: 1Letzter Beitrag: 15.02.2012, 12:12 -
Programm verkleinert ausführen?
Von FranzJoseph im Forum SonstigeAntworten: 2Letzter Beitrag: 26.01.2012, 01:21
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.