package test.java.oo ;
import java.util.concurrent.Executors ;
import java.util.concurrent.ScheduledExecutorService ;
import java.util.concurrent.TimeUnit ;
import com.google.common.util.concurrent.ListeningScheduledExecutorService ;
import com.google.common.util.concurrent.MoreExecutors ;
public class NonBlockingExcutor {
private static ListeningScheduledExecutorService mListeningScheduledExecutorService = null ;
private static ScheduledExecutorService mScheduledExecutorService = null ;
private static boolean isTurnOn = false ;
public static class doWork
implements Runnable {
this .name = name;
}
@Override
public void run( ) {
if ( isTurnOn) {
System .
out .
println ( name
+ " 完工!" ) ; } else {
mListeningScheduledExecutorService.schedule ( this , 1 ,
TimeUnit.SECONDS ) ;
System .
out .
println ( name
+ " 等待開工" ) ; }
}
}
public static void main
( String [ ] args
) { mScheduledExecutorService = Executors.newScheduledThreadPool ( 5 ,
Executors.defaultThreadFactory ( ) ) ;
mListeningScheduledExecutorService = MoreExecutors
.listeningDecorator ( mScheduledExecutorService) ;
for ( int i = 1 ; i <= 9 ; i++ ) {
mListeningScheduledExecutorService.submit ( new doWork( "任務" + i) ) ;
}
// 打開電源的工作
mListeningScheduledExecutorService.
submit ( new Runnable ( ) { @Override
public void run( ) {
isTurnOn = true ;
}
} ) ;
}
}
cGFja2FnZSB0ZXN0LmphdmEub287CgppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CgppbXBvcnQgY29tLmdvb2dsZS5jb21tb24udXRpbC5jb25jdXJyZW50Lkxpc3RlbmluZ1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnV0aWwuY29uY3VycmVudC5Nb3JlRXhlY3V0b3JzOwoKcHVibGljIGNsYXNzIE5vbkJsb2NraW5nRXhjdXRvciB7CgoJcHJpdmF0ZSBzdGF0aWMgTGlzdGVuaW5nU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIG1MaXN0ZW5pbmdTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBudWxsOwoJcHJpdmF0ZSBzdGF0aWMgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIG1TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBudWxsOwoKCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNUdXJuT24gPSBmYWxzZTsKCglwdWJsaWMgc3RhdGljIGNsYXNzIGRvV29yayBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKCQlwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsKCgkJcHVibGljIGRvV29yayhTdHJpbmcgbmFtZSkgewoJCQl0aGlzLm5hbWUgPSBuYW1lOwoJCX0KCgkJQE92ZXJyaWRlCgkJcHVibGljIHZvaWQgcnVuKCkgewoJCQlpZiAoaXNUdXJuT24pIHsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIiDlrozlt6UhIik7CgkJCX0gZWxzZSB7CgkJCQltTGlzdGVuaW5nU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLnNjaGVkdWxlKHRoaXMsIDEsCgkJCQkJCVRpbWVVbml0LlNFQ09ORFMpOwoJCQkJU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiIOetieW+hemWi+W3pSIpOwoJCQl9CgkJfQoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQltU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gRXhlY3V0b3JzLm5ld1NjaGVkdWxlZFRocmVhZFBvb2woNSwKCQkJCUV4ZWN1dG9ycy5kZWZhdWx0VGhyZWFkRmFjdG9yeSgpKTsKCQltTGlzdGVuaW5nU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gTW9yZUV4ZWN1dG9ycwoJCQkJLmxpc3RlbmluZ0RlY29yYXRvcihtU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKTsKCQlmb3IgKGludCBpID0gMTsgaSA8PSA5OyBpKyspIHsKCQkJbUxpc3RlbmluZ1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZS5zdWJtaXQobmV3IGRvV29yaygi5Lu75YuZIiArIGkpKTsKCQl9CgkJCgkJLy8g5omT6ZaL6Zu75rqQ55qE5bel5L2cCgkJbUxpc3RlbmluZ1NjaGVkdWxlZEV4ZWN1dG9yU2VydmljZS5zdWJtaXQobmV3IFJ1bm5hYmxlKCkgewoJCQlAT3ZlcnJpZGUKCQkJcHVibGljIHZvaWQgcnVuKCkgewoJCQkJaXNUdXJuT24gPSB0cnVlOwoJCQl9CgkJfSk7Cgl9Cgp9Cg==
compilation info
Main.java:10: error: class NonBlockingExcutor is public, should be declared in a file named NonBlockingExcutor.java
public class NonBlockingExcutor {
^
Main.java:7: error: package com.google.common.util.concurrent does not exist
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
^
Main.java:8: error: package com.google.common.util.concurrent does not exist
import com.google.common.util.concurrent.MoreExecutors;
^
Main.java:12: error: cannot find symbol
private static ListeningScheduledExecutorService mListeningScheduledExecutorService = null;
^
symbol: class ListeningScheduledExecutorService
location: class NonBlockingExcutor
Main.java:39: error: cannot find symbol
mListeningScheduledExecutorService = MoreExecutors
^
symbol: variable MoreExecutors
location: class NonBlockingExcutor
5 errors
stdout