王知无(import_bigdata)
微信搜:import_bigdata
GitHub搜:https://github.com/wangzhiwubigdata/God-Of-BigData
展开
-
【硬刚Java并发】JAVA多线程(七):线程同步(三)线程的同步代码练习
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。银行有一个账户。有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。问题:该程序是否有安全问题,如果有,如何解决?【提示】1,明确哪些代码是多线程运行代码,须写入run()方法2,明确什么是共享数据。3,明确多线程运行代码中哪些语句是操作共享数据的。拓展问题:可否实现两个储户交替存钱的操作package com.atguigu.ex原创 2021-09-24 03:11:32 · 354 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(一):基本概念:程序、进程、线程
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 定义 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期 如:运行中的QQ,运行中的MP3播放器 程序是静态的,进程是动态的 进程作为资源分配的单位,系统在运行时会...原创 2021-09-24 02:55:11 · 393 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(八):线程通信(一)线程的通信基础
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 通信方法1.1 wait() 与 notify() 和 notifyAll() wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,而当前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有权后才能继续执行。 notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待 n原创 2021-09-24 03:14:12 · 363 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(六):线程同步(二)线程的同步代码实现
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 实例一创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式package com.atguigu.java;/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * * 1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题 * 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与.原创 2021-09-24 03:10:19 · 338 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(十):线程创建使用 (四)JDK5.0新增线程创建方式
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 新增方式一:实现Callable接口与使用Runnable相比, Callable功能更强大些相比run()方法,可以有返回值 方法可以抛出异常 支持泛型的返回值 需要借助FutureTask类,比如获取返回结果Future接口可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。 FutrueTask是Futrue接口的唯一的实现.原创 2021-09-24 03:21:37 · 294 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(九):线程通信(二)线程的通信经典例题:生产者/消费者问题
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。这里可能出现两个问题:1.生产者比消费者快时,消费者会漏掉一些数原创 2021-09-24 03:17:22 · 308 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(一):volatile 关键字 内存可见性
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。可见性错误是指当读操作与写操作在不同的线程中执行时,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。我们可以通过同步来保证对象被安全地发布。除此之外我们也可以使用一种更加轻量级的原创 2021-09-24 03:23:53 · 326 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(二):原子变量 CAS算法
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1CAS 算法CAS (Compare-And-Swap) 是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。CAS 是一种无锁的非阻塞算法的实现。CAS 包含了 3 个操作数:需要读写的内存值 V 进行比较的值 A 拟写入的新值 B当且仅当 V 的值等于 A 时,CAS 通过原子方式用新值 B 来更新 V 的值,否则不会执行任.原创 2021-09-24 03:27:36 · 296 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(四):CountDownLatch 闭锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。CountDownLatchJava 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:确保某个计算在其需要的所有资源都被初原创 2021-09-24 03:31:30 · 298 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(五):实现 Callable 接口
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 Callable 接口Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。Callable 需要依赖FutureTask ,FutureTask 也可以原创 2021-09-24 03:33:05 · 272 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(三):ConcurrentHashMap 锁分段机制
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 ConcurrentHashMapJava 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分段”机制替代 Hashtable 的独占锁。进而提高性能。此包还提供了设原创 2021-09-24 03:29:00 · 309 阅读 · 0 评论 -
【硬刚Java并发】
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 线程的创建和启动Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体 通过该Thread对象的start()方法来启动这个线程,而非直接调用run()2Thread类构造器 Thread():创建.原创 2021-09-24 02:57:35 · 319 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(五):线程同步(一)线程的同步
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1问题的提出多个线程执行的不确定性引起执行结果的不稳定多个线程对账本的共享,会造成操作的不完整性,会破坏数据。2模拟火车站售票程序,开启三个窗口售票1. 多线程出现了安全问题2. 问题的原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。3. 解决办法:...原创 2021-09-24 03:05:24 · 363 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(三):线程创建使用 (二)线程的创建和使用 代码实现
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 创建方式一package atguigu.java;/** * 多线程的创建,方式一:继承于Thread类 * 1. 创建一个继承于Thread类的子类 * 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()中 * 3. 创建Thread类的子类的对象 * 4. 通过此对象调用start() * <p> * 例子:遍历100原创 2021-09-24 03:00:18 · 308 阅读 · 0 评论 -
【硬刚Java并发】JAVA多线程(四):线程创建使用 (三)线程的生命周期
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1JDK中用Thread.State类定义了线程的几种状态要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态: 新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态 就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它.原创 2021-09-24 03:01:47 · 296 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(18):多线程锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。锁的八个问题演示/*** @Description: 8 锁 *1 标准访问,先打印短信还是邮件------sendSMS------sendEmail2 停 4 秒在短信方法内,先打印短信还是邮件------sendSMS------sendEmail3 新增普通的 hello 方法,是先打短信还是 hello------getHello------sendSMS4 现原创 2021-09-24 04:00:46 · 291 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(19):Callable 接口
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 目前我们学习了有两种创建线程的方法-一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口。==现在我们学习的是创建线程的第三种方案---Callable 接口==Callable 接口的特点如下(原创 2021-09-24 04:04:23 · 304 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(22):BlockingQueue阻塞队列
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 BlockingQueue 简介 Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他们各自的功能以及常见使用场景。阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,原创 2021-09-24 04:12:44 · 272 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(23):ThreadPool 线程池
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 线程池简介 线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。例子: 10 年前单核 CPU 电脑,假的多线程,像马戏团小丑玩多个球,CPU 需要来回切换。 现原创 2021-09-24 04:15:39 · 301 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(20):JUC强大的辅助类
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 减少计数 CountDownLatch CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句。 CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,这些线程会阻塞 其它线程调用 countDown 方原创 2021-09-24 04:06:58 · 296 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(21):ReentrantReadWriteLock读写锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。针对这种场景,JAVA 的并发包提供了读写锁 ReentrantReadWriteLock,它表示两个锁,一个是读原创 2021-09-24 04:08:19 · 377 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(24):Fork/Join分支合并框架
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 Fork/Join 框架简介 Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情:1.任务分割:首先 Fork/Join 框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割2.执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启原创 2021-09-24 04:18:38 · 302 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(八):ReadWriteLock 读写锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。读-写锁 ReadWriteLockReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。。ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性原创 2021-09-24 03:38:06 · 261 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(六):Lock 同步锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。显示锁 Lock在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与synchronized 相同的互斥性和内存可见性。但相较于synchroniz原创 2021-09-24 03:35:43 · 285 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(七):Condition 控制线程通信
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。ConditionCondition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。在 Condition 对象中,与 wait、notify 和 n原创 2021-09-24 03:37:01 · 261 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(十一):线程调度
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 ScheduledExecutorService一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。package com.atguigu.juc;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.Executors;impo原创 2021-09-24 03:44:52 · 262 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(十二):ForkJoinPool 分支/合并框架
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1Fork/Join 框架Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。2 Fork/Join 框架与线程池的区别采用 “工作窃取”模式(work-stealing):当执行新的任务时它可以将其拆分分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机..原创 2021-09-24 03:46:37 · 269 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(九):线程八锁
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 线程八锁一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法 锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法 加个普通方法后发现和同步锁无关 换成两个对象后,不是原创 2021-09-24 03:41:45 · 255 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(十):线程池
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。线程池第四种获取线程的方法:线程池,一个 ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用 Executors 工厂方法配置。线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的原创 2021-09-24 03:43:36 · 286 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(14):JUC概述
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 JUCJUC就是 java.util .concurrent 工具包的简称。2 进程与线程概念2.1进程与线程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某...原创 2021-09-24 03:49:32 · 307 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(13):简介
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。原创 2021-09-24 03:47:32 · 247 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(17):集合的线程安全
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 Vector Vector 是矢量队列,它是 JDK1.0 版本添加的类。继承于 AbstractList,实现了 List, RandomAccess, Cloneable 这些接口。 Vector 继承了 AbstractList,实现了 List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。 Vector 实现了 RandmoAccess 接口,即提供了随机访问功能。原创 2021-09-24 03:57:27 · 263 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(15): Lock 接口
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。1 Synchronized1.1 Synchronized 关键字回顾synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种:1.修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;2.修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象原创 2021-09-24 03:52:28 · 264 阅读 · 0 评论 -
【硬刚Java并发】JUC基础(16):线程间通信
本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析场景---两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信==问题: A 线程打印 5 次 A,B 线程打印 10 次 B,C 线程打印 15 次 C,按照此顺序循环 10 轮==...原创 2021-09-24 03:53:35 · 276 阅读 · 0 评论