import java.io.PrintStream;
import java.util.*;
import java.util.concurrent.*;
public class Main
{
public static
{
Future f=execute ( 1,TimeUnit.SECONDS, new Callable (){
@Override
{
for(int i=0;;++i)
if (i % 100000000==0)
o.println ( "working hard..." );
}
});
o.println ( "Cancel!" );
f.cancel ( false ); //ты больше не нужен
f.cancel ( true ); //да останавливайся сука
executor.shutdownNow (); //ну пожалуйста - освободи ценные ресурсы
o.println ( "Shutdown" );
}
@SuppressWarnings("unchecked")
public static <T>
Future<T> execute(
long timeout,TimeUnit unit, Callable<T> task
){
return executeAll
(timeout,unit,
Arrays.
asList ( task
)).
get(0); }
public static <T>
List<Future<T>> executeAll(
long timeout, TimeUnit unit,Collection<Callable<T>> tasks
){
try{
return executor.invokeAll(tasks, timeout, unit);
}
}
static void sl(int millis){
try {
e.printStackTrace();
}
}
final static ExecutorService
executor = Executors.newFixedThreadPool ( 3 );
}
CmltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC4qOwoKcHVibGljIGNsYXNzIE1haW4KewogICAgc3RhdGljIFByaW50U3RyZWFtIG89U3lzdGVtLm91dDsKCXB1YmxpYyBzdGF0aWMgIAoJdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIAoJdGhyb3dzIEV4Y2VwdGlvbgoJewoJCUZ1dHVyZSBmPWV4ZWN1dGUgKCAxLFRpbWVVbml0LlNFQ09ORFMsIG5ldyBDYWxsYWJsZSAoKXsKCgkJCUBPdmVycmlkZQoJCQlwdWJsaWMgT2JqZWN0IGNhbGwgKCkKCQkJdGhyb3dzIEV4Y2VwdGlvbgoJCQl7CgkJCQlmb3IoaW50IGk9MDs7KytpKQoJCQkJCWlmIChpICUgMTAwMDAwMDAwPT0wKQoJCQkJCQlvLnByaW50bG4gKCAid29ya2luZyBoYXJkLi4uIiApOwoJCQl9CQkJCgkJfSk7CgkJby5wcmludGxuICggIkNhbmNlbCEiICk7IAogICAgICAgIGYuY2FuY2VsICggZmFsc2UgKTsgLy/RgtGLINCx0L7Qu9GM0YjQtSDQvdC1INC90YPQttC10L0KCQlmLmNhbmNlbCAoIHRydWUgKTsgLy/QtNCwINC+0YHRgtCw0L3QsNCy0LvQuNCy0LDQudGB0Y8g0YHRg9C60LAKCQlleGVjdXRvci5zaHV0ZG93bk5vdyAoKTsgLy/QvdGDINC/0L7QttCw0LvRg9C50YHRgtCwIC0g0L7RgdCy0L7QsdC+0LTQuCDRhtC10L3QvdGL0LUg0YDQtdGB0YPRgNGB0YsKICAgICAgICBvLnByaW50bG4gKCAiU2h1dGRvd24iICk7IAoJCQoJfQoJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCglwdWJsaWMgc3RhdGljIDxUPiAKCUZ1dHVyZTxUPiBleGVjdXRlKAoJCWxvbmcgdGltZW91dCxUaW1lVW5pdCB1bml0LCBDYWxsYWJsZTxUPiB0YXNrCgkpewoJCXJldHVybiBleGVjdXRlQWxsKHRpbWVvdXQsdW5pdCxBcnJheXMuYXNMaXN0ICggdGFzaykpLmdldCgwKTsKCX0gICAgCgkJCglwdWJsaWMgc3RhdGljIDxUPiAKCUxpc3Q8RnV0dXJlPFQ+PiBleGVjdXRlQWxsKAoJCWxvbmcgdGltZW91dCwgVGltZVVuaXQgdW5pdCxDb2xsZWN0aW9uPENhbGxhYmxlPFQ+PiB0YXNrcwoJKXsKCQl0cnl7CgkJCXJldHVybiBleGVjdXRvci5pbnZva2VBbGwodGFza3MsIHRpbWVvdXQsIHVuaXQpOwoJCX1jYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSl7CgkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwoJCX0JCSAKCX0KCXN0YXRpYyB2b2lkIHNsKGludCBtaWxsaXMpewoJCXRyeSB7CgkJCVRocmVhZC5zbGVlcCAobWlsbGlzKTsKCQl9Y2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKCQl9Cgl9CQoJZmluYWwgc3RhdGljIEV4ZWN1dG9yU2VydmljZSAKCQlleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2wgKCAzICk7Cn0K