Java Threads | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 2

Java Threads

I am trying to write a code where users inputs answer within a particular time. In my code I have created two files, one that handles the user input and contains the main method, with the second file which contains a class that extends the timer class to control the time factor of the code. So my code notifies the main method when the time is up, but it still waits for the user to input even after time is up. What I want to program to do is exit the main method and end the program completely even if the user hasn't entered the value when time is up.

6th Jul 2023, 7:12 AM
Surendra Singh Rajawat
Surendra Singh Rajawat - avatar
7 Answers
+ 1
You can check this thread too, there are two different solutions. https://stackoverflow.com/questions/44038081/set-time-limit-on-user-input-scanner-java
6th Jul 2023, 11:08 AM
Tibor Santa
Tibor Santa - avatar
+ 2
This the Main.java file:- package Test; import java.util.*; import Timer.*; public class Main implements Runnable { public void run(){} public static Main obj; public static void main(String[] args) throws InterruptedException { obj = new Main(); Timer timer = new Timer(); TimerTask task = new Pack(); Date date = new Date(); Scanner sc = new Scanner(System.in); String str; timer.scheduleAtFixedRate(task, date, 5000); System.out.println("Timer running"); synchronized(obj){ str = sc.nextLine(); //obj.wait(); timer.cancel(); //System.out.println(timer.purge()); System.out.println(str); } } } } } This is the Pack.java file:- package Timer; import java.util.*; import Test.*; public class Pack extends TimerTask { public static int i = 0; public void run(){ Main run = new Main(); Thread t = new Thread(run); System.out.println("Timer " + ++i); if(i == 4) { synchronized(Main.obj){ //notifies main method Main.obj.notify(); t.interrupt(); } } } } this is my attempt for now, i will add my actual code in synchronised(obj) in main when this works correctly.
6th Jul 2023, 9:08 AM
Surendra Singh Rajawat
Surendra Singh Rajawat - avatar
+ 2
If you are new to Java, in my opinion messing around with threads and concurrency maybe be reaching way over your head. :) I imagine a newbie would be also shocked by things like AtomicBoolean or ScheduledExecutorService. If you want to learn more about BufferedReader, I recommend to read this post: https://www.baeldung.com/java-buffered-reader
6th Jul 2023, 11:22 AM
Tibor Santa
Tibor Santa - avatar
+ 1
Please share your attempt
6th Jul 2023, 8:56 AM
Sakshi
Sakshi - avatar
+ 1
Since I am new to java can you explain what this line means and does? BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
6th Jul 2023, 11:15 AM
Surendra Singh Rajawat
Surendra Singh Rajawat - avatar
+ 1
Actually AtomicBoolean and ScheduledExecutorService did go above my head🥲 hence I skipped that method and tried the first one which is working. Thank you for your help, appreciate it
6th Jul 2023, 11:33 AM
Surendra Singh Rajawat
Surendra Singh Rajawat - avatar
+ 1
Linkin Park fans 🤘
8th Jul 2023, 5:49 AM
Bikash Das
Bikash Das - avatar