• Java学习 · 初识 多线程


    多线程

    1. 基础概念

    a)     程序 Program

                      i.           静态代码,指令集,应用程序执行的蓝本

    b)    进程 Process

                      i.           动态概念,正在运行的程序,有地址空间,操作系统任务调度

                    ii.           特点

    1. 动态性
    2. 并发性
    3. 独立性

    c)     线程 Thread

                      i.           在进程内多条执行路径

                    ii.           轻量级进程

                  iii.           一个进程中运行多个线程,完成不同任务,称为多线程

    d)   

    1. 2.   线程的创建

    a)     继承Thread + 重写run方法

                      i.          

    b)    实现Runnable接口 + 实现Run接口

                      i.           使用静态代理

    1. 创建真实角色
    2. 创建代理角色,Thread + 真实角色的引用
    3. 代理角色.start

                    ii.           两种区别

                  iii.           常用方法

                  iv.           另一种实现

    1. 通过Callable接口实现多线程

    a)    

    b)    思路

                                                     i.           创建 Callable实现类+重写call

                                                   ii.           借助 执行调度服务 ExecutorService,获取Future对象

                                                  iii.           获取值 result.get()

                                                  iv.           停止服务 ser.shutdownNow();

                                                    v.          

    1. 线程状态

    a)    

    b)    停止线程

                      i.           Void interrupt()

    1. 发送中断请求
    2. 如果被Sleep调用阻塞,抛出异常

                    ii.           Static Boolean interrupted()

    1. 测试当前线程是否被中断
    2. 副作用:将当前线程的状态重置为false

                  iii.           Boolean isInterupte()

    1. 没有副作用

                  iv.           Static Thread currentThread()

    1. 返回代表当前执行线程的Thread线程
    1. 同步:并发,多个线程访问同一份资源,确保资源安全  -->线程安全

    a)     关键字synchronized

                      i.           同步块 synchronized

                    ii.           同步方法 synchronized

    1. 5.   死锁:过多的同步引发

    a)     解决:生产者消费者模式

                                              i.       信号灯法

                                            ii.       一、 wait() :等待,释放锁   sleep 不释放锁

                                           iii.       二、notify()/notifyAll():唤醒

                  iv.             与 synchronized 一起使用

  • 相关阅读:
    看完这篇文章,你还会问陈景润证明“1+2”有什么意义吗?
    stm32串口发送数据复位 第一个数据丢失
    无理数的由来
    定义一个大数组时,出现错误,程序进入HardFault_Handler中断
    STM32使用FatFs
    块级元素IE6/IE7下inline-block解决方案
    Building Your First jQuery Plugin
    ub挂载window磁盘
    PE文件结构部分解析以及输入的定位
    私有云建设之超融合技术
  • 原文地址:https://www.cnblogs.com/secoding/p/9497863.html
Copyright © 2020-2023  润新知