线程创建分三类
1.继承Thread+run()
启动:创建子类对象 + 对象.start();
2.实现Runnable+run()
启动:使用静态代理
1>创建真实角色
2>创建代理角色 Thread+引用
3>代理角色.start()
推荐使用接口:
1、避免单继承局限性
2、便于共享资源
3.通过Callable接口实现多线程(服务器编程必须掌握)
优点:可以获取返回值
Callable和Future接口
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务
Callable和Runnable有几点不同:
1)Callable规定的方法是call();而Runnable规定的方法是run()
2)call方法是可以抛出异常的,但是run方法是不能抛出异常的
3)Callable的任务执行后可返回值,运行Callable任务可拿到一个Future对象,而Runnable的任务是不能返回值得
Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可了解任务执行情况,可取消任务执行,还可获取任务执行结果。
缺点:繁琐
思路:
1)创建Callable实体类+重写call
2)借助执行调度服务ExecutorService,获取Future对象
ExecutorService ser = Executors.newFixedThreadPool(2);
Future result = ser.submit(实体类对象);
3)获取值:result.get()
4)停止服务:ser.shutdownNow();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)