import java.io.PrintStream;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
public final class Main {
private static void trySleep(final long period) {
try {
}
public static void main
(final String[] argv
) { final CountingTask task = new CountingTask();
final ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(task);
trySleep(1000);
System.
out.
println("trying to pause..."); task.pause();
trySleep(1000);
System.
out.
println("trying to resume..."); task.resume();
executor.shutdown();
try {
executor.awaitTermination(5, TimeUnit.SECONDS);
}
}
final class CountingTask
implements Runnable {
private volatile boolean paused;
@Override
public void run() {
try {
out.println("counting starting");
for (int i = 1; i <= 100; ++i) {
out.printf("%3d ", i);
if ((i % 10) == 0) {
out.println();
}
if (paused) {
out.println("counting pausing");
synchronized (this) {
wait();
}
}
}
out.println();
ex.printStackTrace();
}
}
public void pause() {
paused = true;
}
public void resume() {
paused = false;
synchronized (this) {
notify();
}
}
}
aW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CgppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CgpwdWJsaWMgZmluYWwgY2xhc3MgTWFpbiB7CgogIHByaXZhdGUgc3RhdGljIHZvaWQgdHJ5U2xlZXAoZmluYWwgbG9uZyBwZXJpb2QpIHsKICAgIHRyeSB7CiAgICAgIFRocmVhZC5zbGVlcChwZXJpb2QpOwogICAgfSBjYXRjaCAoZmluYWwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZXgpIHsgfQogIH0KCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJndikgewogICAgZmluYWwgQ291bnRpbmdUYXNrIHRhc2sgPSBuZXcgQ291bnRpbmdUYXNrKCk7CiAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGFzayk7CgogICAgdHJ5U2xlZXAoMTAwMCk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRyeWluZyB0byBwYXVzZS4uLiIpOwogICAgdGFzay5wYXVzZSgpOwoKICAgIHRyeVNsZWVwKDEwMDApOwogICAgU3lzdGVtLm91dC5wcmludGxuKCJ0cnlpbmcgdG8gcmVzdW1lLi4uIik7CiAgICB0YXNrLnJlc3VtZSgpOwoKICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CiAgICB0cnkgewogICAgICBleGVjdXRvci5hd2FpdFRlcm1pbmF0aW9uKDUsIFRpbWVVbml0LlNFQ09ORFMpOwogICAgfSBjYXRjaCAoZmluYWwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZXgpIHsgfQogIH0KfQoKZmluYWwgY2xhc3MgQ291bnRpbmdUYXNrIGltcGxlbWVudHMgUnVubmFibGUgewoKICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gcGF1c2VkOwoKICBAT3ZlcnJpZGUKICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICBmaW5hbCBQcmludFN0cmVhbSBvdXQgPSBTeXN0ZW0ub3V0OwogICAgdHJ5IHsKICAgICAgb3V0LnByaW50bG4oImNvdW50aW5nIHN0YXJ0aW5nIik7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDEwMDsgKytpKSB7CiAgICAgICAgb3V0LnByaW50ZigiJTNkICAgIiwgaSk7CiAgICAgICAgaWYgKChpICUgMTApID09IDApIHsKICAgICAgICAgIG91dC5wcmludGxuKCk7CiAgICAgICAgICBUaHJlYWQuc2xlZXAoNTAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhdXNlZCkgewogICAgICAgICAgb3V0LnByaW50bG4oImNvdW50aW5nIHBhdXNpbmciKTsKICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICB3YWl0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIG91dC5wcmludGxuKCk7CiAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICB9CiAgfQoKICBwdWJsaWMgdm9pZCBwYXVzZSgpIHsKICAgIHBhdXNlZCA9IHRydWU7CiAgfQoKICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7CiAgICBwYXVzZWQgPSBmYWxzZTsKICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICBub3RpZnkoKTsKICAgIH0KICB9Cn0=