1,进程和进程相关概念

        进程是计算机中程序关于某数据集合上的一次运行活动

                是系统进行资源分配的基本单位--就是程序的执行过程

        1,独立性:每一个进程都有自己的空间,在没有经过进程本身允许的情况下,一个进程不可以直接访问其他的进程空间

        2,动态性:进程是动态产生,动态消亡的

        3,并发性:任何进程都可以同其他进程一起并发执行

                并行--在同一时刻,有多个指令在多个cup上同时执行

                并发--在同一时刻,有多个指令在单个cup上交替执行

        对于一个cpu来说,他是在多个进程之间轮换执行的,如果多个就可以并行多个进程

2,线程及相关概念

        进程可以同时执行多个任务,每个任务就是线程

3,多线程的意义--跟写的程序有关-幕布

        提高执行效率

        同时处理多个任务--并发与并行也可以同时进行

4,java开启线程的方式--3个

        继承Thread类

                1,编写一个类,继承thread

                2,重写run方法

                3,将线程任务写在run方法中

                4,创建线程对象

                5,调用start方法开启线程

                注意事项:在调用start方法的时候,会自动调用run方法   

                        只有调用start方法,才是开启了新线程

        注:java程序默认是多线程的

                1,main线程

                2,垃圾回收线程

        实现Runnable接口--无结果返回

                1,编写一个类实现Runnable接口

                2,重写Run方法

                3,将线程任务代码,写在run方法中

                4,创建Runnable接口的实现类对象

                5,创建一个线程对象,并将Runnable接口的实现类对象接入

                6,使用线程对象调用start方法开启线程

                既可以实现接口,也可以继承父类,更加灵活,可以开启多条线程

        实现Callable接口--有结果返回

                1,编写一个类实现Callable接口

                2,重写call方法--此方法存在返回值

                3,将线程任务代码写在call方法中

                4,创建线程资源对象

                5,创建线程任务对象,封装线程资源

                6,创建线程对象,传入线程任务

                7,使用线程对象调用start开启线程

5,Thread相关方法

        休眠线程的方法

                public static void sleep(long time):让线程休眠指定时间,单位为毫秒

        线程调度方式

                抢占式调度:谁抢到算谁的,有随机性

                非抢占式调度:

        线程优先级:1~10,默认为5

6,线程的安全和同步问题

        安全问题出现的条件:

                是多线程环境

                有共享数据

                有多条语句操作共享数据

        同步技术:

                将多条语句操作共享语句的代码锁起来,让任意时刻只能有一个线程可以执行

                三种同步方案

                同步代码块:

                        锁对象可以是任意对象,但是需要保证多条线程的锁对象,是同一把锁

                        同步可以解决多线程的数据安全问题,但是也会降低程序的运行效率

                

                        可以用字节码来当锁,因为类的字节码文件只有一份,也方便

                同步方法

                        方法分为静态和非静态

                        静态方法的锁对象是字节码对象,非静态方法的锁对象是this 

                

                Lock锁                

                        使用lock锁,我们可以更清晰的看到哪里加了锁,哪里释放了锁

                        lock是接口,不能直接创建对象

                        

                        

7,线程池介绍和JDK提供的线程池

        将线程对象交给线程池维护,可以降低系统成本,从而提升程序的性能

        系统创建一个线程的成本是比较高的,因为涉及到与操作系统的交互

        当程序中需要创建大量生存期很短暂的线程时,频繁的创建和销毁线程,会严重浪费系统资源

        JDK提供的线程池

                Executors中提供静态方法来创建线程池

                ExecutorService pool = Executors.newCachedThreadPool();

8,自定义线程池

        ThreadPoolExecutor 类

        参数1:核心线程数量--正式员工--不能小于0

        参数2:最大线程数量--正式工+临时工--不能小于等于0而且大于等于核心线程数量

                任务数量大于核心线程加队列长度的时候,创建临时线程

        参数3:空闲时间--判断销毁临时线程--不能小于0

        参数4:时间单位--指定一个单位--时间单位

        参数5:任务队列--指定排队人数--不能为null

        参数6:线程对象工厂--专门创建线程对象--不能为null

        参数7:拒绝策略--不能为null

                

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐