1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。
2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。
3、 Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用 Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中 止,这只是Java的规则,在各个 *** 作系统中总会发生一些小的混淆。
4、Runtime.addShutdownHook()方法可以注册一个hook在JVM执行shutdown的过程中,方法的参数只要是一个初始化过但是没有执行的Thread实例就可以。(注意,Java中的Thread都是执行过了就不值钱的哦)
5、 说到addShutdownHook这个方法就要说一下JVM运行环境是在什么情况下shutdown或者abort的。文档上是这样写的,当最后一个非 精灵进程退出或者收到了一个用户中断信号、用户登出、系统shutdown、Runtime的exit方法被调用时JVM会启动shutdown的过程, 在这个过程开始后,他会并行启动所有登记的shutdown hook(注意是并行启动,这就需要线程安全和防止死锁)。当shutdown过程启动后,只有通过调用halt方法才能中止shutdown的过程并退 出JVM。
可以。URLConnection里面有一个setConnectionTimeout(int timeout)
* @param timeout an {@code int} that specifies the connect
* timeout value in milliseconds
java 1.5以上的Future类可以执行超时处理。
jdk1.5自带的并发库中Future类中重要方法包括get()和cancel(),get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout) *** 作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。
代码如下:
import java.util.concurrent.Callableimport java.util.concurrent.ExecutionException
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import com.sun.corba.se.impl.orbutil.closure.Future
import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException
public class ThreadTest {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
final ExecutorService exec = Executors.newFixedThreadPool(1)
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
//开始执行耗时 *** 作
Thread.sleep(1000 * 5)
return "线程执行完成."
}
}
try {
Future<String> future = exec.submit(call)
String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS) //任务处理超时时间设为 1 秒
System.out.println("任务成功返回:" + obj)
} catch (TimeoutException ex) {
System.out.println("处理超时啦....")
ex.printStackTrace()
} catch (Exception e) {
System.out.println("处理失败.")
e.printStackTrace()
}
// 关闭线程池
exec.shutdown()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)