多线程

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 一起使用

Java学习 · 初识 多线程的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  3. 2019/3/7 Java学习之多线程(基础)

    Java学习之多线程 讲到线程,就必须要懂得进程,进程是相当于一个程序的开始到结束,而线程是依赖于进程的,没有进程,就没有线程.线程也分主线程和子线程,当在主线程开启子线程时,主线程结束,而子线程还可 ...

  4. java学习笔记 --- 多线程(多线程的创建方式)

    1.创建多线程方式1——继承Thread类. 步骤:  A:自定义类MyThread继承Thread类.  B:MyThread类里面重写run()? 为什么是run()方法呢? C:创建对象 D:启 ...

  5. Java学习之多线程详解

    一.多线程的实现 1.继承Thread类 ​ a.子类继承Thread类具备多线程能力 ​ b.启动线程:子类对象.start() ​ c.不建议使用:避免OOP单继承局限性 package com. ...

  6. java学习之多线程

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程(Lightweight Process,LWP)是程序中一个单一 ...

  7. JAVA学习总结-多线程基础:

    参考书籍:疯狂JAVA讲义 1.进程和线程; 进程是处于运行过程中的程序;并且具有一定的独立功能;进程是系统进行系统资源分配和调度的一个独立单位. 一般而言,进程包括以下三个特征: 独立性:进程是系统 ...

  8. JAVA学习笔记 -- 多线程之共享资源

    在多线程程序执行过程中,可能会涉及到两个或者多个线程试图同一时候訪问同一个资源.为了防止这样的情况的发生,必须在线程使用共享资源时给资源"上锁",以阻挡其他线程的訪问. 而这样的机 ...

  9. 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal

    什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...

随机推荐

  1. Flask—10-项目部署(02)

    项目部署 WEB工作原理 客户端(chrom) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=& ...

  2. JavaScript高级程序设计(复制变量值、传递参数)

    复制变量值 一个变量向另一个变量复制基本类型值和引用类型值时,是存在不同的. 一个变量向另一个变量复制基本类型的值,会在变量的对象上创建一个新值,然后把该值复制到为新变量分配的位置上. var num ...

  3. angular动态绑定样式以及改变UI框架样式的方法

    一:angular动态绑定样式 举个栗子: <tr *ngFor="let dataTr of tableData;let i = index" [formGroupName ...

  4. 【TOJ 3600】Fibonacci II (对数+斐波那契通项式)

    描述 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i> ...

  5. vue 整体引入 mint-ui 样式失败

    当引入Mint-ui 整体css 时 如果出现了这样的错误, 是指找不到对应的Mint-UI 的css :需要从node_modules里寻找 解决方法是在webpack.config.js(有的项目 ...

  6. Angular.js-2入门

    1.angular与MVC MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  7. Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

    首先登陆进入Mysql命令行  执行sql      show variables like 'slow_query%';  结果为OFF 说明还未开启慢查询 执行sql     show varia ...

  8. MAVLink功能开发,移植教程。

    MAVLink功能开发 -----------------本文由"智御电子"提供,同时提供视频移植教程,以便电子爱好者交流学习.---------------- 1.MAVLink ...

  9. 『Linux基础 - 1』计算机基础概念

    这篇笔记的知识点结构目录: 认识计算机: (1)什么是计算机; (2)计算机的发展过程 计算机的构成: (1) 计算机硬件系统; (2) 计算机软件系统 二进制: (1) 为什么用二进制 (2) 二进 ...

  10. Anaconda下的python如何写入环境变量中

    Anaconda是一个非常好的python管理软件,实际使用起来要比直接用python自带的管理工具更好. 若需要将Anaconda下的python.exe添入环境变量中,需要如下设置 如上图所示,需 ...