摘要: “万类之王”Object有11个方法,有两个protected的方法,其中一个为clone方法。Java中的克隆分为浅克隆(ShallowClone)和深克隆(DeepClone)。Object中定义的clone()方法如下: 可以看到,clone()是一个native方法,是非Java语言实现的代 阅读全文
posted @ 2018-03-24 23:21 奔跑在梦想的道路上 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 这两个方法均是超类Object自带的成员方法。Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。可以使用类型为Object的变量指向任意类型的对象。Object 阅读全文
posted @ 2018-03-24 22:27 奔跑在梦想的道路上 阅读(356) 评论(0) 推荐(0) 编辑
摘要: Callable和Future,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行 阅读全文
posted @ 2018-03-24 21:58 奔跑在梦想的道路上 阅读(163) 评论(0) 推荐(0) 编辑
摘要: ScheduledThreadPoolExecutor 继承自ThreadPoolExecutor实现了ScheduledExecutorService接口。主要完成定时或者周期的执行线程任务。 代码如下: 代码执行结果如下: 阅读全文
posted @ 2018-03-24 21:10 奔跑在梦想的道路上 阅读(11580) 评论(0) 推荐(0) 编辑
摘要: 为什么要用线程池呢? 一是减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务; 二是可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。 线程池的基本思想是 阅读全文
posted @ 2018-03-24 20:49 奔跑在梦想的道路上 阅读(264) 评论(0) 推荐(0) 编辑