并发编程的基础概念

九鹤 等级 346 0 0

什么是线程 ? 什么是进程? java可以开启线程吗?不能 因为Java无法直接操硬件,他是运行在虚拟机上面的, 什么是并发? 什么是并行? 并发就是多个线程去操作一个资源。 并行是多个线程同时行,但是操作的资源不是同一个。 线程的六个状态 new (诞生) runnable (运行)Blocked(阻塞)waiiiing(等待) Tiem -waiing(超时等待) TERMINATED终止 wait 和seleep 区别 wait 来着objiet seleep 来自Thread wait会释放锁 seleep不会释放锁 wait 作用用同步代码块中 seleep 任何地方 wait 不需要捕获异常 seleep需要

Look (线程是一个单独的资源类) 传统锁 synchionized 本质——队列加锁 look是接口 接口有实现类 读锁 写锁 可重复锁 公平锁 ——先来后到 非公平锁 可以插队

look 三步 1 new look 2 加锁 3 解锁 Synchronied和look区别 1 S是关键字 look是类 2 S自动无法判断锁的状态 3 S会自动释放锁 ,Look锁必须手动释放 如果不手动释放 会造成死锁问题 4 S如果线程一阻塞了 线程二会死等,look锁不会等 5 S开重入锁 不可中断 非公平 :look 可重入 可以判断
生产者和消费者问题 有两个线程 如果一个线程完成对资源的操作 ,通知其他线程继续对资源的操作 如果是多线程 那么就会造成虚假唤醒 具体的业务代码用whlie 来判断 JUC里面再线程的唤醒里可以具体设置要换线哪一个线程 Condition 给每一个线程配置一个监听器 八锁现象
锁的是存在 锁的对象收 方法调用者 两个方法用的是谁先拿到谁先执行 普通S锁的是方法调用者 static 、锁的是该类的clas锁的是全局唯一 new 锁的this static 锁的的全局唯一 集合类不安全 list是线程不安全的 如何实现线程安全呢 1 创建vector(安全的) 2 工具类 所有集合都继承一个Connection Connection .Synchornized(new ArrayLIst<>()); 3 new CopyoOnwriteArrayList<>();
CopyoOnwrite 写入时复制 COW优化策略 写入的时候复制一个数组 写完再插入 concurrentodifictioanEXcptioan 并发修改异常l BlockingQueue 消息队列 Callable 1 可以有返回值 2 可以抛出异常 3 方法不同 CountDownluth -辅助工具类(计算器) 指定一定的线程跑完之后(计数器归零)再往下执行 常用于必须执行的线程的任务

队列是有大小的 再创建队列的时候必须指定队列的大小 队列和list是平级的实现Coonetion 我们创建的队列为普通队列 元素保持先进先出的原则 当队列里面的元素满了 再往里面添加元素会出现异常,从队列里面的拿元素,如果全部拿完也会出现异常 队列里面有四组API设置 这两种异常

第一种 add();//添加元素 remove();//移除或者取出元素 先进先出 会拿出第一个放入的元素
第一种会抛出异常

第二种 添加 offer 移除 poll //有异常不会抛出异常 会返回false 没有异常就发返回true。如果队列里面没有元素就会返回一个null; 第三种 put 添加 take 移除 // 阻塞 当队列里面的元素满了的时候 再添加一个元素的时候 会等 等到队列里面会空出来一个位置 吧这个元素添加进去 这时候从程序才算结束 take也是一样 这样写程序容易崩 第四种 再第三种上面添加了时间限制 如果超过时间限制 就结束等待 同步队列 SynchronousQueue BlockingQunene 没有容量 put take 必须 等待取出来之后 才能往里面添加一个元素即容量最大为一

线程池
好处降低资源消耗 提高响应速度 方便管理 三大方法
ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程 ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一 个固定的线程池的大小 ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩 的,遇强则强,遇弱则弱

阿里开发手册中规定不要使用Java自带的线程池 要根据服务器性能和数据的处理效果来设计一个线程池

收藏
评论区

相关推荐

1 Java内存区域与内存溢出异常
1 java虚拟机对内存的管理 java虚拟机在执行java程序的时候把内存分为若干个不同的区,这些区各自有不同的用处,以及创建和销毁时间. 有的区随着虚拟机的启动而启动,有的区则依赖用户线程的启动和结束而启动和结束. 根据java虚拟机规范,java虚拟机将内存分为下面几个部分:如下图 image(https://imghelloworld.o
Java的其他Map
一、LinkedHashMap 1.1 应用场景 HashMap是无序的,当我们希望有顺序地去存储keyvalue时,就需要使用LinkedHashMap了。 1.2 插入顺序和访问顺序 LinkedHashMap默认的构造参数是默认  插入顺序的,就是说你插入的是什么顺序,读出来的就是什么顺序,但是也有访问顺序,就是说你访问了一个key,这个
.NET C#到Java没那么难,MVC篇
.NET C到Java没那么难,MVC篇 .NET C到Java没那么难,MVC篇 最典型的JAVA MVC就是JSP servlet javabean的模式。比较好的MVC,老牌的有Struts、
.NET C#到Java没那么难,Servlet篇
.NET C到Java没那么难,Servlet篇 .NET C到Java没那么难,Servlet篇 前言 .NET C到Java没那么难,都是面向对象的语言,而且语法还是相似的,先对比一下开发
Java中的浮点数四舍五入到小数点后2位的几种方法
前言 四舍五入到2或3个小数位是我们Java程序员日常开发中肯定会遇到。幸运的是,Java API提供了几种在Java中舍入数字的方法 我们可以使用Math.round(),BigDecimal或DecimalFormat将Java中的任何浮点数四舍五入到n个位置。我个人更喜欢使用BigDecimal在Java中四舍五入任何数字,因为它具有便捷的API并
Groovy初探
开始之前 了解本教程的主要内容,以及如何从中获得最大收获。 关于本教程 如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0。Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单、更灵活的语法,可以在运行时动态地进行类型检查。您可以使用 Groovy 随意编写 Java 应用程序,连接 Java
java对象的生命周期
近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当 抛砖引玉,希望对在这个问题上有疑惑
《java 核心技术》卷1 学习 概述 第一章Java程序设计概述
从浅面了解Java 1.Java 在语言得地位 现在有所下降 但仍是老大哥 所以值得学习 2.Java特性 1.简单性:从一方面来说 Java可以支持在小型机器上运行 必定不是很复杂得,所以上手不难 2.面向对象:Java有相比于其他的语言 更简单得接口
Java的JDK配置
一、JDK的环境配置 1、在jdk官网下载(https://www.oracle.com/java/technologies/javasejdk14downloads.html)所想要的jdk版本,选择路径安装.(我这边选择的是windowsx64\_bin.exe) 安装好之后,打开电脑控制面板主页,点击选择高级系统设置
Java里面的十万个为什么
Java里面的十万个为什么 1.不是说 JVM 是运行 Java 程序的虚拟机吗?那 JRE 和 JVM 的关系是怎么样的呢?简单地说,JRE 包含 JVM 。JVM 是运行 Java 程序的核心虚拟机,而运行 Java 程序不仅需要核心虚拟机,还需要其他的类加载器,字节码校验器以及大量的基础类库。JRE 除包含 JVM 之外,还包含运行 Java 程序的其
Java Web服务器的介绍
一、Java Web服务器的介绍Web服务器:是指能够为发出请求的浏览器提供文档的程序。服务器是一种被动程序,只有浏览器发出请求的时候才会响应。主流的Web服务器有:1.WebLogic:Bea公司开发的一个收费的大型服务器软件,后被Oracle收购,支持Java EE 所有规范。2.Tomcat:由Apache、Sun和其他一些公司及个人共同开发而成。该服
Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6.序列化与反序列化 7.Object有哪些方法? 8.JVM内存模型 9.类加载机制 10.对象的创建和对象的布局 11.Java的四种引用
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表
2021年度最全面JVM虚拟机,类加载过程与类加载器
前言类装载器子系统是JVM中非常重要的部分,是学习JVM绕不开的一关。一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表
JAVA回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按

热门文章

GraphQLsecurity 概念RabbitMq 的高级特性

最新文章

security 概念GraphQLRabbitMq 的高级特性