> ### 线程的实现方法
- 实现`Runnable`方法并实现`run()`方法
- 继承`Thread`方法并重写`run()`方法
> ### 线程的使用
通过调用`start()`方法启动线程, 线程会执行`run()`方法里的代码。
> #### FutureTask
我们都知道,JAVA里面实现线程有两种方式,但是实现的线程方法都是没有返回值的,如果我们需要知道线程运行之后的结果,直接继承Thread或者实现Runnable接口是不行的,JDK还提供了一个Callable接口,可以返回运算结果,但是这个类线程里面没有构造方法,这里就需要FutureTask接口了
~~~
// 通过new Thread方式执行
FutureTask futureTask = new FutureTask(new Callable(){
public Object call(){ //重写call方法
return "abc"; // 返回的对象
}
});
new Thread(futureTask).start();
futureTask.get(); // 线程返回结果
~~~
~~~
// 同过线程池执行
ExecutorService service = Executors.newFixedThreadPool(2);
Future<Integer> submit = service.submit(()->{
return 5;
});
System.out.println(submit.get()); // 线程返回结果
~~~
- 2111总结
- 1.面向对象
- 1.0.1 super()与this()的区别
- 1.0.2 private、default、protected、public的访问范围
- 1.0.3 continue、break、return区别
- 1.0.4 重载和重写的区别
- 1.0.5 final的特点
- 1.0.6 抽象类与接口的区别
- 1.0.7 java类型
- 1.0.8 什么是反射
- 1.0.9 类的加载机制
- 1.1.1 jvm内存结构
- 1.1.2 java垃圾回收机制
- 1.1.3 并发问题
- 1.1.3.1 线程的状态与关系
- 1.1.3.2 并发的三大性质
- 1.1.3.3 线程的实现与使用
- 1.1.3.4 线程池相关
- 1.1.3.5 并发相关方法
- 1.1.3.6 线程相关工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表达式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 动态代理实现
- 2.JavaEE
- 2.0.1 JSP四大作用域九大内置对象
- 2.0.2 cookie与session的区别
- 4.数据库相关
- 5.git版本管理
- 7.一些问题解决
- 7.1 分布式锁如何实现