BlockingQueue阻塞队列 BlockingQueue简介 juc包下,BlockingQueue很好的解决了多线程中,高效安全的"传输数据"问题。阻塞队列,是一个队列,可以是数据从队列的一端输入,从另一端输出。当队列空时,从队列获取元素线程被阻塞,直到其他线程向空的队列插入新元素。当队列满时,向队列添加元素线程被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来后新增。在多线程中,阻塞是指在某些情况下,挂起线程,一旦条件满足,被挂起的线程被自动唤醒。 队列和栈 队列FIFO(先进先出)栈FILO(先进后出) 常用的BlockingQueue子类 ArrayB...

  2Vtxr3XfwhHq   2023年11月27日   35   0   0 Java

ReentrantReadWriteLock读写锁 乐观锁和悲观锁 乐观锁 乐观锁,就是给需要共享的数据,添加一个版本号version,例如1,每次有线程更新共享数据后,version+1,每次线程进行数据更新时,要比较当前线程持有的数据的版本号,相等则修改,不相等则不修改,支持并发访问。 悲观锁 悲观锁,就是每次只能有一个线程,访问共享的数据,其他线程都阻塞,只有当前线程结束,才会释放锁,其他线程中的一个才能访问,不支持并发访问。 表锁和行锁 表锁 线程涉及到数据库的修改时,其他线程不能修改整个表中的任意行数据,就是表锁,表锁不会出现行锁。 行锁 线程涉及到数据库的修改时,只锁当前的一行,是...

  2Vtxr3XfwhHq   2023年11月25日   33   0   0 Java

Callable接口和Future接口 创建线程的方式 1.继承Thread类2.实现Runnable接口3.Callable接口4.线程池方式 Callable接口 在继承Thread类和实现Runnable接口的方式创建线程时,线程执行的run方法中,返回值是void,即无法返回线程的执行结果,为了支持该功能,java提供了Callable接口。 Callable和Runnable接口的区别 1.Callable中的call()方法,可以返回值,Runnable接口中的run方法,无返回值(void)。 2.call()方法可以抛出异常,run()不能抛异常。 3.实现Callable接...

  2Vtxr3XfwhHq   2023年11月21日   42   0   0 Java

常见锁介绍 synchronized锁的八中情况 packagecom.shaonian.juc.more_thread_lock; importjava.util.concurrent.TimeUnit; classPhone{ publicstaticsynchronizedvoidsendSMS()throwsException{ //停留4秒 TimeUnit.SECONDS.sleep(4); System.out.println("------sendSMS"); } publicsynchronizedvoidsendEmail()throwsException{ Sys...

  2Vtxr3XfwhHq   2023年11月17日   40   0   0 Java

ArrayList在多线程情况下,不安全 具体代码 packagecom.shaonian.juc.list_thread_secure; importjava.util.ArrayList; importjava.util.List; importjava.util.UUID; / @author长名06 @version1.0 演示ArrayList集合线程不安全 / publicclassListDemo{ publicstaticvoidmain(String[]args){ List<String>list=newArrayList<>(); for(i...

  2Vtxr3XfwhHq   2023年11月06日   57   0   0 Java

Lock实现线程间定制化通信 案例 要求 三个线程,AABBCCAA线程打印5次,BB线程打印10次,CC线程打印15次 代码实现 importjava.util.concurrent.locks.Condition; importjava.util.concurrent.locks.Lock; importjava.util.concurrent.locks.ReentrantLock; / @author长名06 @version1.0 线程定制化通信 / //第一步,创建共享资源,和操作方法 classShareFlag{ privateLocklock=newReentrantLoc...

  2Vtxr3XfwhHq   2023年11月02日   70   0   0 Java

线程间通信 多线程编程步骤(中) 第一,创建资源类,创建属性和操作方法;第二,在资源操作方法,1)判断2)工作3)通知;第三,创建多线程调用资源类的方法。 案例 要求,有两个线程,实现对一个初始值为0的变量,一个线程对值+1,一个线程对值-1。 代码实现 / @author长名06 @version1.0 线程通信案例两个线程对一个值进行decrincr 用synchronized关键字实现 / classShare{ privateintnumber; publicsynchronizedvoidincr()throwsInterruptedException{ / 这样写,会出现虚假...

  2Vtxr3XfwhHq   2023年11月02日   58   0   0 Java

Synchronized Synchronized关键字回顾 synchronized是java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1.修饰一个代码块,被修饰的代码块称为同步代码块,其作用的范围是大括号{},括起来的代码,作用的对象是调用这个代码块的对象,synchronized不能修饰静态代码块。 2.修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象。 3.修饰一个静态方法,其作用范围是整个静态方法,作用的对象是这个类的所有对象。 4.修饰一个类,其作用范围是synchronized后面括号括起来的部分,作用主要的对象是这个类的...

  2Vtxr3XfwhHq   2023年11月02日   42   0   0 Java

JUC前置知识 JUC概述 在开发语言中,线程部分是重点,JUC是关于线程的。JUC是java.util.concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。 线程和进程 线程和进程的概念进程(process):是计算机的程序关于某数据集合上的一次允许活动,是操作系统进行资源分配和任务调度的最小单位,是操作系统的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令,数据及其组织形式的描述,进程是程序的实体。线程(thread):是操作系统或CPU核心能够进行调度的最小单位。被包含在进程中,是进程中的实际运行单位。一条线程指的是进程中一个单一顺序的...

  2Vtxr3XfwhHq   2023年11月02日   51   0   0 Java

职责链模式 案例引入 OA(OfficeAutomation)系统的采购审批项目,需求是1.采购员采购教学用品。2.price>=0&&price<=5000由教学主任审批3.price>5000&&price<=10000由原则审批4.price>10000&&price<=30000由副校长审批5.price>30000由校长审批 传统方式完成采购审批任务 采购员类,采购请求类,以及审批组类(教学主任,院长等),每次采购人员,发起采购请求(创建一个采购请求对象),在这个对象中会依赖审批组类,然后采购请...

  2Vtxr3XfwhHq   2023年11月02日   58   0   0 Java

策略模式 案例引入 duck项目 要求:1.有各种鸭子,比如野鸭,北京鸭,水鸭等,鸭子有各种行为,比如叫,飞行。2.显示鸭子的信息。 传统方式实现案例 1.抽象一个父类duck,有其子类,野鸭、北京鸭、水鸭等。 代码 / @author长名06 @version1.0 / publicabstractclassDuck{ publicDuck(){ } publicabstractvoiddisplay(); publicvoidquack(){ System.out.println("鸭子嘎嘎叫"); } publicvoidswim(){ System.out.println("...

  2Vtxr3XfwhHq   2023年11月02日   82   0   0 Java

状态模式 案例引入 APP抽奖活动 请编写抽象完成APP抽奖活动,具体要求如下:1.假如每参加一次这个活动要扣除用户50积分,中将概率是10%。2.奖品数量固定,抽完就不能抽了。3.活动状态有四个,分别是,可以抽奖,不能抽奖,发送奖品,奖品已领完。4.活动的状态转换图 基本介绍 1.状态模式(StatePattern):主要用来解决对象在多种状态转换时,需要对外输出不同的行为问题。状态和行为是一一对应的,状态之间可以相互转换。2.当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 原理类图 类图角色分析 1.Context类为环境角色,用于维护State实例,这个实例...

  2Vtxr3XfwhHq   2023年11月02日   98   0   0 Java

解释器模式 案例引入 四则运算问题 通过解释器模式来实现四则运算(先只考虑+-),如计算a+bc的值,具体要求 1.先输入表达式,比如a+b+c-d+e,要求表达式的字母不能重复。 2.再分别输入a,b,c,d,e的值。 3.最后求出结果。 传统方法实现四则运算问题及分析 1.编写一个方法,接收表达式的形式,然后根据用户输入的数值,进行解析,得到结果。 2.问题分析:如果加入新的运算符,比如,/等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰。 3.解决方案:可以考虑使用解释器模式,即表达式->解释器(可以有多种)->结果。 基本介绍 1.在编译原理中,一...

  2Vtxr3XfwhHq   2023年11月02日   78   0   0 Java

备忘录模式 案例引入 游戏角色状态恢复问题 游戏角色有攻击力,防御力等,在大战BOSS前保存自身的状态(攻击力,防御力),当大战BOSS后攻击力和防御力下降,从备忘录对象恢复到大站前的状态。 传统方式实现案例 创建一个游戏角色类对应的状态类,给每个游戏角色对象,对应一个对应状态类的对象,用来保存状态。 传统方式实现问题分析 1.一个游戏对象,就对应一个保存游戏状态的对象,这样如果游戏中有很多游戏角色,也会产生很多与之对应的状态角色,不利于管理,其内存开销很大。 2.传统的方式,就是简单的备份,new一个另外的对象来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节。 3.解决方案...

  2Vtxr3XfwhHq   2023年11月02日   69   0   0 Java

中介者模式 案例引入 要求 1.智能家庭包括设备,闹钟,咖啡机,窗帘等。 2.主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为,闹钟响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放。 传统方式实现案例 有闹钟类(Alarm),电视类(TV),窗帘类(Curtains),咖啡机(CoffeeMachine),闹钟发消息给咖啡机,咖啡机发消息给窗帘,窗帘发消息给电视,来实现要求中的流程。中介者模式和外观模式的区别,内部子系统是独立的。 传统方式问题分析 1.当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂。 2.各个电器对象间彼...

  2Vtxr3XfwhHq   2023年11月02日   82   0   0 Java

设计模式的目的 编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的 1.代码重用性(相同代码,不用重复编写) 2.可读性(编程规范性,便于其他程序员的阅读和理解) 3.可扩展性(当需要增加新的功能时,非常的方便) 4.可靠性(当我们增加新的功能后,对原有的功能没有影响) 5.使程序呈现高内聚,低耦合的特性设计模式(designpattern)包含了面向对象的精髓,"懂了设计模式,你就懂了面向对象分析和设计的精要"。学习设计模式,更多的是学是一种设计和分析的思想。 七大原则 设计模式的原则,其实就是程序员在编程时,应当遵...

  2Vtxr3XfwhHq   2023年11月01日   38   0   0 Java

接口隔离原则 介绍 客户端不要依赖不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。 案例引入 A类,通过接口1依赖B类,C类通过依赖接口1依赖D类,A类只会用到1-3方法,C类只会使用到1,4,5方法。 uml类图 代码实现 publicclassSegregation1{ publicstaticvoidmain(String[]args){ Aa=newA(); a.dependency1(newB()); a.dependency2(newB()); a.dependency3(newB()); Cc=newC(); c.dependency1(newD()); c.d...

  2Vtxr3XfwhHq   2023年11月01日   104   0   0 Java

里氏替换原则 OOP(ObjectOrientedProgramming)面向对象编程 OO中的继承性的思考 1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。 2.继承在程序设计带来便利同时,也带来弊端。使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合,如果一个类被其他类继承,则当这个类需要修改时,必须考虑所有的子类,并且父类修改后,所有涉及到的子类的功能可能会受到影响。 3.问题提出,编码中如何正确的使用继承?=>里氏替换原则 基本介绍...

  2Vtxr3XfwhHq   2023年11月01日   84   0   0 Java

工厂设计模式 简单(静态)工厂模式 基本介绍 1.简答工厂模式,属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单,最实用的模式。 2.简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为。 3.在软件开发中,当使用到大量的创建某类,或某些对象时,就会使用到工厂模式。 案例代码 / 抽象的披萨类 @author长名06 @version1.0 / publicabstractclassPizza{ privateStringname; publicabstractvoidprepare(); p...

  2Vtxr3XfwhHq   2023年11月01日   130   0   0 Java

原型模式 案例引入 克隆羊问题 有一只羊,姓名为tom,年龄为1,颜色为白色,编写程序创建和tom羊属性完全相同的羊。 传统方式解决 代码实现 publicclassSheep{ privateStringname; privateintage; privateStringcolor; publicSheep(){ } publicSheep(Stringname,intage,Stringcolor){ this.name=name; this.age=age; this.color=color; } publicStringgetName(){ returnname; } publ...

  2Vtxr3XfwhHq   2023年11月01日   108   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~