Files
mercury/java/runtime/Task.java
Zoltan Somogyi 8e45a89895 Use spaces, not tabs, in the Java and C# runtimes.
Add modelines to keep it that way.

Fix formatting, and english in comments.
2018-07-10 13:52:11 +02:00

85 lines
1.8 KiB
Java

// vim: ts=4 sw=4 expandtab ft=java
//
// Copyright (C) 2014, 2018 The Mercury Team
// This file is distributed under the terms specified in COPYING.LIB.
//
package jmercury.runtime;
/**
* Task is a task being managed by MercuryThreadPool.
* Callers can use this object to wait for the task's completion.
*/
public class Task implements Runnable
{
private static long next_id;
private long id;
private Runnable target;
private Status status;
public enum Status {
NEW,
SCHEDULED,
RUNNING,
FINISHED
}
/**
* Create a new task.
*/
public Task(Runnable target) {
id = allocateTaskId();
this.target = target;
status = Status.NEW;
}
private static synchronized long allocateTaskId() {
return next_id++;
}
public void run() {
updateStatus(Status.RUNNING);
target.run();
updateStatus(Status.FINISHED);
}
public long getId() {
return id;
}
public void scheduled() {
updateStatus(Status.SCHEDULED);
}
/**
* Update the task's status and notify any threads waiting on the
* status change.
*/
protected synchronized void updateStatus(Status status) {
if (MercuryThreadPool.debug) {
System.err.println("Thread: " + Thread.currentThread() +
"task: " + this + " status " + status);
}
this.status = status;
notifyAll();
}
/**
* Wait for the task to complete.
* This waits on the task's monitor. Callers should not be holding
* any other monitors.
*/
public synchronized void waitForTask()
throws InterruptedException
{
while (status != Status.FINISHED) {
wait();
}
}
public String toString() {
return "Task " + id;
}
}