天天看点

多线程

学习重点:线程实现和线程同步

简介:任务,进程,线程,多线程

多任务:

两个任务:一边吃饭,一边玩手机。

多线程:

多线程

程序、进程、线程

程序:

一组指令的有序集合,是静态的,例如没有运行的代码

进程:

执行程序的一次执行过程,是动态的实体,是跑起来的程序。进程是系统资源分配的单位

线程:

一个进程包含若干线程,至少一个不然没有意义。线程是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

继续阅读