分布式 Java 中间件

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

关键词: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 中间件实践》,曾宪杰,电子工业出版社

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 319 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 521 关注
  • Electron

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

    15 引用 • 136 回帖 • 7 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 126 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 54 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖
  • V2Ray
    1 引用 • 15 回帖 • 2 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 10 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖 • 1 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 589 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 315 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖 • 2 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 151 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖
  • MyBatis

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

    170 引用 • 414 回帖 • 429 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 597 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 404 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 449 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 93 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 175 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 20 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    22 引用 • 31 回帖 • 3 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    96 引用 • 330 回帖 • 1 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注