学习重点:线程实现和线程同步
简介:任务,进程,线程,多线程
多任务:
两个任务:一边吃饭,一边玩手机。
多线程:
程序、进程、线程
程序:
一组指令的有序集合,是静态的,例如没有运行的代码
进程:
执行程序的一次执行过程,是动态的实体,是跑起来的程序。进程是系统资源分配的单位
线程:
一个进程包含若干线程,至少一个不然没有意义。线程是cpu调度和执行的单位
一些核心概念:
线程是独立的执行路径
在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;
main()称为主线程,为系统入口,用于执行整个程序;
在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的
对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;线程会带来额外开销,如cpu调度时间,并发控制开销
每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
线程的创建:
thread:(查看实例)
自定义线程类继承thread类
重写run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
(线程不一定立即执行,由cpu调度)
runnable:(查看实例)
定义一个类实现runnable接口
实现run()方法,编写线程执行体
(推荐使用runnable对象,因为java单继承的局限性、其灵活方便)
callable:(查看实例)
实现callable接口,需要返回值类型
重写call()方法,需要抛出异常
创建目标对象
创建执行服务:executorservice ser = executors.newfixedthreadpool(1);
提交执行:future<boolean> resilt1 = ser.submit(t1);
获取结果:boolean r1 = result1.get();
关闭服务:ser.shutdownnow();
thread实例:
runnable实例:
callable实例:
分布日期:2021-10-11