Institute of Computer Science
  1. Courses
  2. 2017/18 spring
  3. Object-Oriented Programming (Narva College) (P2NC.01.083)
ET
Log in

Object-Oriented Programming (Narva College) 2017/18 spring

  • Home
  • Materials
  • Java Glossary
  • Source Example
  • Cheat sheet (S1-S6)
  • Grading
  • Links
Session 14

Creating tasks and threads

Tasks are objects. To create tasks, we have to define a class for the tasks. The class has to implement the Runnable interface. The Runnable interface is rather simple. All it contains is the run method. We need to implement this method to tell the system how our thread is going to run. A template for developing a task class is as follows:

// Custom task class
public class TaskClass implements Runnable {
    ...
    public TaskClass(...) {
        ...
    }
    // Implement the run method in Runnable
    public void run() {
        // Tell system how to run custom thread
        ...
    }
    ...
}
// Client class
public class Client {
    ...
    public void someMethod() {
        ...
        // Create an instance of TaskClass
        TaskClass task = new TaskClass(...);
        // Create a thread
        Thread thread = new Thread(task);
        // Start a thread
        thread.start();
        ...
    }
    ...
}

Once we have defined a TaskClass, we can create a task using its constructor. For example,

TaskClass task = new TaskClass(...);

A task must be executed in a thread. The Thread class contains the constructors for creating threads and many useful methods for controlling threads. To create a thread for a task, use

Thread thread = new Thread(task);

We can then invoke the start() method to tell the JVM that the thread is ready to run, as follows:

thread.start();

The JVM will execute the task by invoking the task’s run() method. When the run() method completes, the thread terminates.

PS! Pay attention:

The run() method in a task specifies how to perform the task. This method is automatically invoked by the JVM. You should not invoke it. Invoking run() directly merely executes this method in the same thread; no new thread is started.

For example, let's look at a program that reads two files at once and then prints their contents line by line. Since both files are processed in parallel, their contents are printed our chaotically. If we run the program many times - each time we will get a slightly different output.

Files that can be used as input
https://raw.githubusercontent.com/mbakhoff/oop-samples/master/threads/countdownlatch.txt
https://raw.githubusercontent.com/mbakhoff/oop-samples/master/threads/executorservice.txt

public class OurFileReader implements Runnable {
  private String nameOfFile;

  public OurFileReader(String nameOfFile) {
    this.nameOfFile= nameOfFile;
  }

  @Override
  public void run() {
    try (Scanner scanner = new Scanner(new File(nameOfFile))) {
      while (scanner.hasNextLine()) {
        System.out.println(scanner.nextLine());
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }
}

public class Test {
  public static void main(String[] args) {
    Thread fileReaderThread1 = new Thread(new OurFileReader("countdownlatch.txt"));
    Thread fileReaderThread2 = new Thread(new OurFileReader("executorservice.txt"));
    fileReaderThread1.start();
    fileReaderThread2.start();
  }
}
Session 14
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment