2016-04-21 4 views
0

Ich bin ein Anfänger in der Programmierung. Ich lerne immer noch über Threads und mehr von ihnen. Aber jetzt habe ich eine ziemlich große Idee, mein erstes Programm zu schreiben (ich meine größer als ein einfacher Rechner). Ich will, dass es Dateien sortiert, in einem integriert (viele Kopien einer Datei in verschiedenen Lokalisierungen - die Idee ist jetzt nicht mehr wichtig).JAVA Echtzeit Consol-Steuerung der Threads

Aber ich möchte Threads oder irgendetwas anderes (was ist Ihr Rat) erstellen. Ich meine. Wenn ich das Programm starte, startet die Konsole, und ich muss zum Beispiel "my_programm run" oder "my_program stop" oder "my_program status" oder "my_magic_tricks be_done" schreiben. Ich meine, wie kann ich ein Programm erstellen im Hintergrund arbeiten wie in Threads mit Echtzeit-String-Steuerelement über es. Ich habe versucht, auf Google nach etwas zu suchen, das für mich nützlich sein könnte, aber ich habe es nicht herausgefunden.

Bitte geben Sie mir nur einen Namen von Bibliotheken oder Methoden, die ich verwenden kann. Ich werde vorlesen, worum es geht und schließlich werde ich damit fortfahren.

Wenn es eine dumme Frage ist. Es tut mir wirklich leid, die Programmierergruppe enttäuscht zu haben. Aber es wäre schön, von irgendeinem Wegweiser oder Hinweis zu hören.

+1

Willkommen bei Stack Overflow. Ich weiß, es kann überwältigend sein. Kannst du diese Frage in kleinere Fragen aufteilen, die direkter zu beantworten sind? Sei so klar und einfach wie möglich. Hier scheint es, dass Sie zu viele Dinge gleichzeitig tun möchten. –

+0

Vielleicht hast du recht. Welche Bibliotheken sollte ich verwenden, die die Befehlszeile in Echtzeit lesen? – xross

+1

Wenn Sie ein Anfänger sind, bleiben Sie vorerst von Threads weg. Es gibt eine Menge von grundlegenden Dingen, die zuerst gelernt werden, die Ihnen besser stehen. –

Antwort

3

Eine einfache Möglichkeit, es mit der Standardbibliothek zu tun:

import java.util.Scanner; 
import java.util.concurrent.LinkedBlockingDeque; 
import java.util.concurrent.ThreadPoolExecutor; 

import static java.util.concurrent.TimeUnit.MILLISECONDS; 

public class Example { 
    private static final int POOL_SIZE = 5; 
    private static final ExecutorService WORKERS = new ThreadPoolExecutor(POOL_SIZE, POOL_SIZE, 1, MILLISECONDS, new LinkedBlockingDeque<>()); 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     while (true) { 
      System.out.print("> "); 
      String cmd = sc.nextLine(); 
      switch (cmd) { 
       case "process": 
        WORKERS.submit(newExpensiveTask()); 
        break; 

       case "kill": 
        System.exit(0); 

       default: 
        System.err.println("Unrecognized command: " + cmd); 
      } 
     } 
    } 

    private static Runnable newExpensiveTask() { 
     return() -> { 
      try { 
       Thread.sleep(10000); 
       System.out.println("Done processing"); 
      } catch (InterruptedException e) { 
       throw new RuntimeException(e); 
      } 
     }; 
    } 
} 

Mit diesem Code können Sie laufen asynchron schwere Aufgaben, während der Benutzer-Terminal zur Verfügung und reaktiv bleibt.

+0

Whoa, wusste nicht, dass es so einfach gemacht werden könnte. Danke dafür ;). Ich bin mir sicher, dass ich es in meiner Idee verwenden werde. – xross

+0

@ Xross kein Problem. Wenn es hilft, werde ich mich freuen, eine Verbesserung zu bekommen: D – Dici

+0

Ich habe es getan, aber der Upvote wird markiert werden, kurz nachdem ich mehr Reputationspunkte bekommen werde: /. Also sei geduldig, es wird abgestimmt;). Danke – xross

0

Ich würde empfehlen, auf spezifische Übungen, wie die Java Language Tutorial lesen up (als Buch - zumindest früher - wie auch auf der Java-Website https://docs.oracle.com/javase/tutorial/essential/concurrency/)

jedoch als andere haben Vorsicht ist geboten, Threading ist eine Herausforderung und erfordert gute Kenntnisse der Sprache ganz abgesehen von den Aspekten des Multithreading und der Synchronisation. Ich wäre in der Versuchung, Ihnen zu empfehlen, einige der anderen Tutorials zu lesen - zuerst mit IO und so weiter -.

+0

Meiner Meinung nach kann ich ein gutes IO machen. Ich habe etwas wie Celluar-Automaten gemacht, der Zellen live simuliert :). Es war nicht so schwer, ich denke schon. Vielleicht ist es nicht so fortgeschritten, aber es war eine gute Übung – xross