多线程(Day21)

多线程

        程序 进程 线程

        程序:一堆代码的封装,指的是我们保存在硬盘中的可执行文件。静态概念

        进程:正在执行或等待执行的程序,在运行内存中处理。动态概念

        线程:程序运行时,不同的执行分支。

        Java来说,当我们的程序开始执行,也就是main方法开始执行,在栈内存中开辟以main方法为栈底元素的栈帧。此时,这个以main方法为栈底元素的链式栈帧调用就称为线程。

        并发并行

        并发:同时发生

        并行:同时执行

        单核CPU和多核CPU

        1个CPU只能做一件事,所以没有办法并行执行,但是可以并发执行。

        单核CPU是假的多线程,因为一个单位时间内,只能执行一个线程任务,多核CPU才能更好发挥多线程的效率

        线程创建

        创建线程有两种方式

        1.继承Thread类,并覆写run方法

        2.实现Runnable接口,并覆写run方法

Thread

        使用方式

多线程(Day21)_第1张图片

         Runnable

多线程(Day21)_第2张图片

优先级和常用方法

        优先级

        在Java中提供了1-10共10个优先级,在Thread中提供了三个常量,MIN_PRIORITY 代表1,NORM_PRIORITY 代表5,MAX_PRIORITY 代表10。子类 默认继承父类优先级,Thread默认是5

        常用方法     

        setPriority 设置优先级

         getPriority 获取优先级

        getName 获取线程名称

        setName 设置线程名字,如果不设置名字,默认为 Thread_0 开始,以此类推

         static  currentThread  获取当前线程对象

        static sleep 让当前线程进入睡眠状态,参数为毫秒

        使用方式

多线程(Day21)_第3张图片

多线程(Day21)_第4张图片

多线程(Day21)_第5张图片

多线程(Day21)_第6张图片

线程控制

多线程(Day21)_第7张图片

        线程停止 

多线程(Day21)_第8张图片

多线程(Day21)_第9张图片

         线程合并

多线程(Day21)_第10张图片

多线程(Day21)_第11张图片

         Yield

        Thread.yield 暂停当前正在执行的线程,并执行其他线程,并且只给同优先级让位。

多线程(Day21)_第12张图片

多线程(Day21)_第13张图片

 

线程同步

        方法锁‘

        Synchronized

        访问一个加锁的成员方法/成员语句块时,该对象中所有加锁的成员方法/成员语句块都会被锁定。

        访问一个加锁的静态方法/静态语句块时,该对象中所有加锁的静态方法/静态语句块都会被锁定。

        synchronized(对象){}   对象语句块(成员语句块)

        synchronized(类名。class){}    类语句块(静态语句块)

        使用方式

        方法锁

多线程(Day21)_第14张图片

多线程(Day21)_第15张图片

        语句块锁

多线程(Day21)_第16张图片

 

        Lock

        从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当.

        java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的 工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象 加锁,线程开始访问共享资源之前应先获得Lock对象

        ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和 内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以 显式加锁、释放锁。

        Lock是显式锁,需要手动开启手动关闭,并且JVM将花费较少的时间来完成线程调度.性能更好,并且还具备更好的扩展性.

        使用方式

多线程(Day21)_第17张图片

 

守护线程

        守护线程:每一个main主程序的开启,都会同时开启一个守护线程来监听我们的正常程序执行。当没有线程执行的时候,守护线程也就终止了。

        使用方式

多线程(Day21)_第18张图片

多线程(Day21)_第19张图片

 定时器任务

        定时器:计划任务,只要有一个计划任务,就会开启一个线程,进行计时监听

        使用方式

多线程(Day21)_第20张图片

你可能感兴趣的:(java)