10.2线程的创建 ⊙传智播客.黑马程序员 改变中国T教育我们正在行动 10.2.2 Runnable:接口实现多线程 说明:Java只支持类的单继承,如果某个类已经继承了其他父类,就无法再继承 Thread:类来实现多线程。在这种情况下,就可以考虑通过实现Runnable接口的 方式来实现多线程。 步骤: ①创建一个Runnable:接口的实现类,同时重写接口中的runO方法; ②创建Runnable接口的实现类对象; ③使用Thread有参构造方法创建线程实例,并将Runnable:接口的实现类的实例 对象作为参数传入; ④调用线程实例的start(0方法启动线程。 yx.boxuegu.com
✎ 10.2 线程的创建 说明:Java只支持类的单继承,如果某个类已经继承了其他父类,就无法再继承 Thread类来实现多线程。在这种情况下,就可以考虑通过实现Runnable接口的 方式来实现多线程。 步骤: ① 创建一个Runnable接口的实现类,同时重写接口中的run()方法; ② 创建Runnable接口的实现类对象; ③ 使用Thread有参构造方法创建线程实例,并将Runnable接口的实现类的实例 对象作为参数传入; ④ 调用线程实例的start()方法启动线程。 10.2.2 Runnable接口实现多线程
10.2线程的创建 ⊙传智播客.黑马程序员 改变中国T教育我们正在行动 10.2.3 Callable接口实现多线程 说明:通过Thread类和Runnable接口实现多线程时,需要重写runO方法,但是 由于该方法没有返回值,因此无法从多个线程中获取返回结果。为了解决这个问 题,从JDK5开始,Java提供了一个新的Callable接口,来满足这种既能创建多线 程又可以有返回值的需求。 使用:Callable接口实现多线程是通过Thread:类的有参构造方法传入Runnable接 口类型的参数来实现多线程,不同的是,这里传入的是Runnable接口的子类 FutureTask对象作为参数,而FutureTask对象中则封装带有返回值的Callable接 口实现类。 yx.boxuegu.com
✎ 10.2 线程的创建 说明:通过Thread类和Runnable接口实现多线程时,需要重写run()方法,但是 由于该方法没有返回值,因此无法从多个线程中获取返回结果。为了解决这个问 题,从JDK 5开始,Java提供了一个新的Callable接口,来满足这种既能创建多线 程又可以有返回值的需求。 使用:Callable接口实现多线程是通过Thread类的有参构造方法传入Runnable接 口类型的参数来实现多线程,不同的是,这里传入的是Runnable接口的子类 FutureTask对象作为参数,而FutureTask对象中则封装带有返回值的Callable接 口实现类。 10.2.3 Callable接口实现多线程
10.2线程的创建 ⊙传智播客.黑马程序员 改变中国T教育我们正在行动 10.2.3 Callable接口实现多线程 步骤: ①创建一个Callable接口的实现类,同时重写Callable接口的call()方法; ②创建Callable接口的实现类对象; ③通过FutureTask线程结果处理类的有参构造方法来封装Callable接口实现类对 象; ④使用参数为FutureTask类对象的Thread有参构造方法创建Thread线程实例; ⑤调用线程实例的start0方法启动线程。 yx.boxuegu.com
✎ 10.2 线程的创建 步骤: ① 创建一个Callable接口的实现类,同时重写Callable接口的call()方法; ② 创建Callable接口的实现类对象; ③ 通过FutureTask线程结果处理类的有参构造方法来封装Callable接口实现类对 象; ④ 使用参数为FutureTask类对象的Thread有参构造方法创建Thread线程实例; ⑤ 调用线程实例的start()方法启动线程。 10.2.3 Callable接口实现多线程
10.2线程的创建 ⊙传智播客.黑马程序员 改变中国T教育我们正在行动 10.2.3 Callable接口实现多线程 一FutureTask继承关系图 Runnab e级tend的 接口 RunnableFuture impements 核心类 FutureTask 说明: ▣Callable接口方式实现的多线程是通过FutureTask类来封装和管理返回结果的 该类的直接父接口是RunnableFuture。 ▣FutureTask本质是Runnable接口和Future接口的实现类,而Future.则是JDK5 提供的用来管理线程执行返回结果的。 yx.boxuegu.com
✎ 10.2 线程的创建 说明: Callable接口方式实现的多线程是通过FutureTask类来封装和管理返回结果的 ,该类的直接父接口是RunnableFuture。 FutureTask本质是Runnable接口和Future接口的实现类,而Future则是JDK 5 提供的用来管理线程执行返回结果的。 10.2.3 Callable接口实现多线程——FutureTask继承关系图
10.2线程的创建 ⊙传智播客.黑马程序员 改变中国T教育我们正在行动 10.2.3 Callable接口实现多线程—-Future接口方法 方法声明 功能描述 用于取消任务,参数mayInterruptIfRunning表示是否允许取消正在 boolean cancel(boolean 执行却没有执行完毕的任务,如果设置true,则表示可以取消正在 mayInterruptIfRunning) 执行的任务 boolean isCancelled() 判断任务是否被取消成功,如果在任务正常完成前被取消成功,则 返回true boolean isDone() 判断任务是否已经完成,若任务完成,则返回tue V get() 用于获取执行结果,这个方法会发生阻塞,一直等到任务执行完毕 才返回执行结果 V get(long timeout,TimeUnit unit) 用于在指定时间内获取执行结果,如果在指定时间内,还没获取到 结果,就直接返回nul yx.boxuegu.com
✎ 10.2 线程的创建 10.2.3 Callable接口实现多线程——Future接口方法 方法声明 功能描述 boolean cancel(boolean mayInterruptIfRunning) 用于取消任务,参数mayInterruptIfRunning表示是否允许取消正在 执行却没有执行完毕的任务,如果设置true,则表示可以取消正在 执行的任务 boolean isCancelled() 判断任务是否被取消成功,如果在任务正常完成前被取消成功,则 返回 true boolean isDone() 判断任务是否已经完成,若任务完成,则返回true V get() 用于获取执行结果,这个方法会发生阻塞,一直等到任务执行完毕 才返回执行结果 V get(long timeout, TimeUnit unit) 用于在指定时间内获取执行结果,如果在指定时间内,还没获取到 结果,就直接返回null