分布式 Java 中间件

本贴最后更新于 2074 天前,其中的信息可能已经时移世易

关键词:java 线程

    中间件是为软件应用提供操作系统所提供的服务之外的服务的,如远程过程调用和对象访问中间件、消息中间件、数据访问中间件

一、Java 线程

    线程操作的 jvm 内存是主内存和工作内存这两个概念的!!!

    1、**线程池:**有效复用线程而不用每次都创建线程,ThreadPoolExecutor、ScheduledThreadPoolExecutor(定时)、Executors.newCachedThreadPool(没有线程上限)

    2、**可见性:**指在一个线程中修改变量的值之后,在其他线程中能够看到这个值

    2、**synchronized 关键字:**声明方法(静态方法则同步锁属于类、成员方法则同步锁属于对象)、代码块(该关键字后的参数,用于同步的锁所属的对象,可以是任意对象) =>(线程间互斥作用、块中变量的可见性作用【在主内存与工作内存中同步变量的值,因此是可见的】)【独占锁】

    3、ReentrantLock 类:类似于修饰代码块时的 syschronized,不过需要显示地进行 unlock(一般写在 finally 中);另有 tryLock 方法,且构造函数可选择构造公平锁(严格按照顺序,所以效率相对低些)与非公平锁(可抢占,可能会导致饿死);ReentrantReadWriteLock 读写锁,主要用于读多写少且读不需要互斥的场景

    4、volatile 关键字:只是保证所修饰的同一个变量在多线程中的可见性,常用于修饰作为开关状态的变量;同一个变量线程间的可见性与多个线程中操作互斥是两码事;【显示锁和原子变量】

    对于一般的变量,如 get 方法的调用获取的都是当前线程工作内存中的副本,因此不一定是最新的值;

    被 volatile 修饰的变量,变量不会有线程的本地副本,只会放在主存中,因此一定是最新的;

    被 sychronized 修饰的变量,则是可以保证线程的本地副本与主存的同步,因此也一定是最新的;

    5、**Atomic*类:**提供一些原子操作,比较明显地提升性能,主要在于如 AtomicInteger 内部通过 JNI 的方式使用了硬件支持的 CAS 指令;

    6、wait、notify、notifyAll 方法:均是 Object 对象的方法,wait 是进行等待的,notify 和 notify 都是唤醒调用同一个对象 wait 方法的线程,区别在于前者唤醒一个等待线程而后者唤醒全部,,且这三个方法的调用都必须在 sychronized 块中

    7、CountDownLatch 类:当多个线程都到达了预期状态或完成预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作;

    8、CyclicBarrier 类:循环屏障,可以协同多个线程并让多个线程在这个屏障前等待,直到所有线程都到达了这个屏障时,再一起继续执行后面的动作;

    9、Semaphore 类:用于管理信号量的,构造的时候传入可供管理的信号量的数值,总数也即控制并发的数量

    10、Exchanger 类:用于在两个线程之间进行数据交换

    11、**Future 接口和 FutureTask 类:**回调

二、并发容器:

    并发容器是线程安全的一种,但是更加强调的是容器的并发性,也即不仅仅只追求线程安全,还要考虑并发性,提升并发环境下的性能;

    **加锁互斥:**线程安全,但降低了并发性,其实就是串行了

    CopyOnWrite:是在更改容器的时候,把容器写一份进行修改,保证正在读的线程不受影响,适合于读多写少的场景会非常好,实质上在写的时候重建了一次容器

    Concurrent:实现思路是尽量保证读不加锁,并且修改时不影响读,所以会达到比使用读写锁更高的并发性能

三、动态代理:

    代理模式

    静态代理

    动态代理:Proxy.newProxyInstance()     invoke()

四、反射

    Java 反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

五、网络通信

    三个模型:BIO、NIO、AIO

    通信框架:MINA,Netty

【读书系列】

    《大型网站系统与 Java 中间件实践》,曾宪杰,电子工业出版社

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1427 引用 • 10046 回帖 • 474 关注
  • gRpc
    11 引用 • 9 回帖 • 50 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 353 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 20 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 51 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 400 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 22 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 598 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 189 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 533 回帖 • 734 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    86 引用 • 897 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 29 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    333 引用 • 619 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    85 引用 • 122 回帖 • 618 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 222 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    141 引用 • 441 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    4 引用 • 91 回帖
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 714 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    26 引用 • 85 回帖 • 1 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 6 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖