consoleアプリ(System.inからの標準入力、System.outへの標準出力を前提としてユーザーと対話するもの)が前提なら、可能かどうかはおつかいのコンソールソフト(あるいはターミナルソフト)に依存します。例えばlinxのターミナルならsttyコマンドを利用することで比較的簡単に実現できると思いますが、その方法が質問者さんにとって充分簡単かは疑問の余地があります。
一方JavaFX, swing, Android, ProcessingなどGUI(ウィンドウやマウスやキーボードでユーザーと対話するもの)ならどのライブラリーであっても任意のキーを押したり離したりといったタイミングを検出できますが、使用するライブラリーによって提供クラス群の仕様がそれぞれ違ってますのでどのライブラリーを用いるかによって具体的方法が異なります。
またこれらのGUIアプリケーションではプログラムの制御方式が基本的に「イベントハンドリング方式」となります。よって
java
1Key key;
2
3key = waitForKey();
4// なにかを処理
5key = waitForKey();
6// なにかを処理
7...
といった感じのプログラミングはできません。
Java
1registerKeyHandler(key -> {
2 // なにかの処理
3});
こんなふうに「キーがおされたときなにかの処理をしておくれ」というのを登録するイメージになります。(念のため:waitForKey, registerKeyHandlerは仮に付けたメソッド名です。実際にそういう名前のメソッドが存在しているという意味ではありません)