2016-04-21 5 views
0

Я начинаю программировать. Я все еще изучаю темы и многое другое. Но теперь у меня есть довольно большая идея написать мою первую программу (я имею в виду больше, чем простой калькулятор). Я хочу, чтобы он сортировал файлы, интегрировался в один (много копий одного файла в другой локализации - идея этого сейчас не имеет значения).JAVA real-time consol-control the threads

Но я хочу создать темы или что-нибудь еще (что твой совет). Я имею в виду. Когда я запускаю программу, консоль запускается, и, например, мне нужно написать «my_programm run» или «my_program stop» или «my_program status» или «my_magic_tricks be_done». Я имею в виду, как я могу создать программу, работающую в фоновом режиме, как в потоках с контролем строки в реальном времени над ней. Я попытался найти в Google все, что может быть полезно для меня, но я этого не узнал.

Пожалуйста, дайте мне только имя библиотек или методов, которые я могу использовать. Я зачитаю, о чем речь, и, наконец, я буду двигаться вперед.

Если это вопрос о тупике. Мне очень жаль разочаровывать группу программистов. Но было бы неплохо дать какой-либо указатель или подсказку.

+1

Добро пожаловать в переполнение стека. Я знаю, это может быть подавляющим. Можете ли вы разбить этот вопрос на более мелкие вопросы, которые более _directly_ отвечают? Будьте предельно ясны и просты. Здесь, похоже, вы хотите сделать слишком много вещей одновременно. –

+0

Возможно, вы правы. Какие библиотеки я должен использовать, которые делают чтение в командной строке в режиме реального времени. – xross

+1

Если вы новичок, держитесь подальше от тем. Вначале есть много более простых вещей, которые помогут вам лучше себя чувствовать. –

ответ

3

Простой способ сделать это с помощью стандартной библиотеки:

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); 
      } 
     }; 
    } 
} 

Этот код позволяет запускать тяжелые задачи асинхронно, а пользовательский терминал остается доступным и реактивная.

+0

Whoa, не знал, что это можно сделать таким простым способом. Спасибо тебе за это ;). Я уверен, что буду использовать его в своей идее. – xross

+0

@xross без проблем. Если это поможет, я буду счастлив получить верхнюю часть: D – Dici

+0

Я сделал это, но верхняя часть будет отмечена сразу после того, как я получу больше очков репутации: /. Так что будьте терпеливы, это будет проголосовано;). Спасибо – xross

0

Я рекомендовал бы читать на конкретных учебных пособий, таких как язык Учебник Java (доступна в виде книги - по крайней мере, он имел обыкновение быть, - а также на веб-сайте Java https://docs.oracle.com/javase/tutorial/essential/concurrency/)

Однако, как другие предостережение, попадание в потоки - это вызов и требует хорошего знания языка, кроме аспектов многопоточности и синхронизации. У меня возникло бы желание порекомендовать вам прочитать некоторые из других уроков - работать через IO и т. Д. - в первую очередь.

+0

На мой взгляд, я могу сделать хороший IO. Я сделал что-то вроде celluar automaton, который имитирует клетку live :). Это было не так сложно, я так думаю. Может быть, он не настолько продвинут, но это было хорошее упражнение. – xross