1. 线程
1. 线程概念:
-
线程就是独立的执行路径
-
在程序运行时,即使没有自己创建线程,后台也会有多个线程
-
main()称之为主线程,是系统的入口,用于执行整个程序
-
多线程的运行由调度器安排调度,调度器与操作系统紧密相关,先后顺序不能人为干预
-
对同一份资源操作时,会发生资源抢夺,需要加入并发控制
-
线程会带来额外的开销,如:CPU调度时间、并发控制开销
-
每个线程在自己的工作内存交互,内存控制不当会数据不一致
2. 线程创建
三种创建方式:
-
Thread class:继承Thread类,重写run()方法,调佣start开启线程
-
Runnable接口:实现Runnable接口
-
Callable接口:实现Callable接口
Thread:
-
自定义线程类继承Thread类
-
重写run()方法,编写线程执行体
-
创建线程对象,调佣start()方法启动线程
Runnable:
-
定义Runnable类实现Runnable接口
-
实现run()方法,编写线程执行体
-
创建线程对象,调用start()方法启动线程
Callable:
-
实现Callable接口,需要返回值类型
-
重写call方法,需要抛出异常
-
创建目标对象
-
创建执行服务
-
提交执行:Future<Boolean>result = ser.submit(t1);
-
获取结果:boolean r1 = result.get()
-
关闭服务: ser.shutdownNow();
3. 小结
Thread类:(不建议使用,单继承的局限性)
-
子类继承Thread类具备多线程能力
-
启动线程:子类对象.start()
Runnable接口:(建议使用,避免单继承局限性,方便一个对象被多个线程使用)
-
实现Runnable接口具有多线程能力
-
启动线程:传入目标对象+Thread对象.start()
多个线程操作同一资源的情况下,线程不安全,数据紊乱