Spring Cloud

多线程并发神器--ThreadLocal

喜夏-厌秋 提交于 2020-05-09 16:59:02
什么是ThreadLocal 可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。 ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程。 首先看看ThreadLocal的类结构 其中可重写的方法有以下几个 initialValue():ThreadLocal初始化的值,新建ThreadLocal的一般要重写给个初始的值。 get():获取当前线程变量的副本值。 set(T value):设置、更新当前线程上的变量副本值。 remove():移除当前线程上的变量副本。 ThreadLocal使用 新建ThreadLocal,类型为User,并初始化为tom,12岁,启动3个线程,每个线程循环3次,休眠1少,主线程再输出。 输出结果如下 从结果可见每个线程使用的是各自线程的变量副本,并没有影响其他线程和主线程,实现了线程隔离的效果。 使用场景 一般用来解决数据库连接、用户session管理等。 内存泄露问题 如果线程的执行周期过长可能导致内存泄露的风险,虽然线程执行完后会ThreadLocal也会随着销毁,但最好使用完后加上remove这样会加快内存的释放,一般来说线程周期不长是不太会引起内存泄露的。还有如果定义了ThreadLocal又不用也有问题,因为每次ThreadLocal的get/set

谈谈最近副业挣钱的感受,一要形成体系,二要找平台加持

北城以北 提交于 2020-05-09 16:10:25
最近我的博文发表得比较少,因为除了主业之外,我把时间都用在录制视频和写书等方面。这几天正好录制完一门课,和出版社谈好的一本书也全部交稿,所以趁着最近构思下本书和后继视频课的时机,总结了一下副业挣钱的模式。所以在这篇博文里,将分享下最近我经营副业的各种心得。 1 总是先从搬砖的钱挣起,但同时要规划自己的知识体系 想到挣钱,不少人第一想到的是通过公众号或其它文章发文,或者到某网发视频积累粉丝,然后再通过广告等方式变现。这种方式一定能挣到钱,但如果文章或视频内容停留在初级阶段,每天的收益估计是有限的,而且要做到有收益的地步,持续时间会很长。 比如我是做Java的,如果我就发非常基础的文章,比如String的不可变特性,以及集合的扩容等,哪怕天天发文,文章数量非常多,要积累1000个粉丝估计会很吃力,但如果我发的文章写的书录的视频包含比较深的要素,比如分布式并发组件,底层代码分析,或者结合大厂面试介绍技术经验,总之不是随便哪里都能找到的,积累粉丝会快很多。 再打个不恰当的比喻,如果初中毕业就去搬砖,确实能立即挣到钱,当如果当时再静下心读个高中,或者本科甚至硕士,那么挣钱的效率会快很多。我这里无意贬低任何挣钱的渠道和模式,这里只是想说,在能力一般的前提下,可以通过写文章等手段提升自己,但不能本末倒置,当下的任务是完善知识体系,而不是计较于当下的收益。 再以Java举例,如何完善知识体系

多线程并发神器--ThreadLocal

折月煮酒 提交于 2020-05-09 15:34:17
什么是ThreadLocal 可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。 ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程。 首先看看ThreadLocal的类结构 其中可重写的方法有以下几个 initialValue():ThreadLocal初始化的值,新建ThreadLocal的一般要重写给个初始的值。 get():获取当前线程变量的副本值。 set(T value):设置、更新当前线程上的变量副本值。 remove():移除当前线程上的变量副本。 ThreadLocal使用 新建ThreadLocal,类型为User,并初始化为tom,12岁,启动3个线程,每个线程循环3次,休眠1少,主线程再输出。 输出结果如下 从结果可见每个线程使用的是各自线程的变量副本,并没有影响其他线程和主线程,实现了线程隔离的效果。 使用场景 一般用来解决数据库连接、用户session管理等。 内存泄露问题 如果线程的执行周期过长可能导致内存泄露的风险,虽然线程执行完后会ThreadLocal也会随着销毁,但最好使用完后加上remove这样会加快内存的释放,一般来说线程周期不长是不太会引起内存泄露的。还有如果定义了ThreadLocal又不用也有问题,因为每次ThreadLocal的get/set

一张图弄懂java线程的状态和生命周期

橙三吉。 提交于 2020-05-09 10:03:20
上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程。 这些状态的枚举值都定义在java.lang.Thread.State下 NEW:毫无疑问表示的是刚创建的线程,还没有开始启动。 RUNNABLE: 表示线程已经触发start()方式调用,线程正式启动,线程处于运行中状态。 BLOCKED:表示线程阻塞,等待获取锁,如碰到synchronized、lock等关键字等占用临界区的情况,一旦获取到锁就进行RUNNABLE状态继续运行。 WAITING:表示线程处于无限制等待状态,等待一个特殊的事件来重新唤醒,如通过wait()方法进行等待的线程等待一个notify()或者notifyAll()方法,通过join()方法进行等待的线程等待目标线程运行结束而唤醒,一旦通过相关事件唤醒线程,线程就进入了RUNNABLE状态继续运行。 TIMED_WAITING:表示线程进入了一个有时限的等待,如sleep(3000),等待3秒后线程重新进行RUNNABLE状态继续运行。 TERMINATED:表示线程执行完毕后,进行终止状态。 需要注意的是,一旦线程通过start方法启动后就再也不能回到初始NEW状态,线程终止后也不能再回到RUNNABLE状态。 推荐去我的博客阅读更多: 1. Java JVM、集合、多线程、新特性系列教程 2. Spring MVC

在线公开课 | 微服务太杂乱难以管理?一站式服务治理平台来袭!

二次信任 提交于 2020-05-08 22:36:35
课程概要 如今微服务已成为构建现代云应用的主导模式,它围绕着特定的业务功能,将单个组件分解为独立的服务。但随之而来产生另外的问题:越来越多的系统被拆解成了很多个细胞一样的微服务,如何对微服务进行管理,这成为许多工程师头疼的挑战。 相信很多成熟企业都拥有复杂的研发环境:上百条产品线、上千位开发人员、数千个服务。 服务部署在多个地域的多个机房,各种服务运行环境很多。开发语言繁多,例如京东智联云以Go、C++、Java、Node.js为主,少量的Python和PHP,随着业务线不同使用的技术框架不同。调用协议有rest,有非rest的HTTP等,还有自定义TCP协议的…… 如何统一管理?服务治理应运而生。通过服务治理来解决分布式服务和微服务在整体的开发和运行时出现的运维问题,处理服务之间的关系,提供一系列数据依据和工具。 4月21日,技术公开课《六周玩转云原生》第五讲《微服务架构下,服务治理体系的演进历程》由京东云与AI事业部云产品研发部架构师张俊峰为大家详细讲解了服务治理、Spring Cloud微服务架构特点、Service Mesh以及京东智联云在微服务的探索。 以下是精华分享内容,咱们一起来看看: 六周玩转云原生 微服务架构下服务治理体系的演进历程 — 京东云与AI产品研发部架构师 张俊峰 — 1 服务治理演变史 服务治理是随着业务规模的不断扩大

多线程并发神器--ThreadLocal

≯℡__Kan透↙ 提交于 2020-05-08 18:23:34
什么是ThreadLocal 可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。 ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程。 首先看看ThreadLocal的类结构 其中可重写的方法有以下几个 initialValue():ThreadLocal初始化的值,新建ThreadLocal的一般要重写给个初始的值。 get():获取当前线程变量的副本值。 set(T value):设置、更新当前线程上的变量副本值。 remove():移除当前线程上的变量副本。 ThreadLocal使用 新建ThreadLocal,类型为User,并初始化为tom,12岁,启动3个线程,每个线程循环3次,休眠1少,主线程再输出。 输出结果如下 从结果可见每个线程使用的是各自线程的变量副本,并没有影响其他线程和主线程,实现了线程隔离的效果。 使用场景 一般用来解决数据库连接、用户session管理等。 内存泄露问题 如果线程的执行周期过长可能导致内存泄露的风险,虽然线程执行完后会ThreadLocal也会随着销毁,但最好使用完后加上remove这样会加快内存的释放,一般来说线程周期不长是不太会引起内存泄露的。还有如果定义了ThreadLocal又不用也有问题,因为每次ThreadLocal的get/set

1-5年工作经验的Java程序员,薪资普遍是在10-25K?

ⅰ亾dé卋堺 提交于 2020-05-08 17:44:10
由于疫情带来的连锁反应,今年的竞争相较往年会更加激烈。最近跟朋友在一起聚会的时候,提了一个问题,说Java程序员要实现月薪38K,技术水平需要达到什么程度?有人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿38K的不太可能是码农了,应该已经转管理。还有区域问题,这个是不在我的考虑范围内 因为除了北上广深杭,其他地方也很难达到。 首先:38K对应的层级分别是什么? 38K的月薪在BAT等一线大厂实在太普遍了,一般是高级工程师和资深工程师的职位,在阿里是p6~p7左右,在百度是t5左右,腾讯是t2-3左右,在京东是t3-1,美团是p6左右,其他的我不了解。 其次:该如何达到对应的层级? 38K的薪资虽然说不是很高,但是对于大部分的程序员来说,也可以当作一个“小目标”了,今天我就在这里就给大家分享一个能够让你进阶到这些层级的技术路线图,并且还有配套的学习资料,让你不仅能定下38K的小目标,还能有实现这个小目标的具体途径和方法。(技术脑图可以保存,配套技术资料在文末获取) 一:底层源码分析 学习Java技术体系,设计模式,流行的框架与组件 常见的设计模式,编码必备 Spring5,做应用必不可少的最新框架 MyBatis,玩数据库必不可少的组件 二:工程化与工具 工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具

零基础自学java在线资源(新手福利)

旧巷老猫 提交于 2020-05-08 17:23:13
俗话说工欲善其事,必先利其器,今天给大家分享一个java自学网站: how2j ,这是一个有十年淘宝工作经验大牛的制作的网站,距离现在已经有三四年了,这个网站包含的知识非常的多,从基础的环境变量配置一直到完整项目的开发部署,以及面试教程,还有很多工具可提供直接下载使用,避免了初学者配置个工具就要半天时间,大大的减少了不必要的麻烦,还设计了很多有趣的游戏例子,提高了学习兴趣,在兴趣中快乐的学习,下面就给大家展示一下: https://how2j.cn 一:代码对比: 很多时候因为一个符号,一个字母写错了,导致程序不能正常运行,调试半天很难发现,最后导致学习兴趣大大减少,很难坚持下去,恰巧这个网站提供了代码比较.可以复制你写的代码和站长的比较,系统一下子就给你提示哪里错了,很快就解决了. 二:模块化教学 java基础: helloworld → 面向对象 → 变量 → 操作符 → 控制流程 → 数组 → 类和对象 → 接口和继承 → 数字与字符串 → 日期 java中级: 异常处理 I/O → 集合框架 → 泛型 → Lambda → 多线程 → JDBC → 图形界面 → 网络编程 → 实战项目 java高级: 反射机制 → 注解 java应用: Log4j → junit → hutool → jsoup → lombok 前端: HTML → CSS → javaScript →

Netty 如何实现心跳机制与断线重连?

最后都变了- 提交于 2020-05-08 16:32:22
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 注:心跳包还有另一个作用,经常被忽略,即: 一个连接如果长时间不用,防火墙或者路由器就会断开该连接。 如何实现 核心Handler —— IdleStateHandler 在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢? 先看下它的构造器: public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) { this((long)readerIdleTimeSeconds, (long)writerIdleTimeSeconds, (long)allIdleTimeSeconds, TimeUnit.SECONDS); } 这里解释下三个参数的含义: readerIdleTimeSeconds: 读超时. 即当在指定的时间间隔内没有从 Channel 读取到数据时, 会触发一个 READER_IDLE 的

java 微服务面试题附pdf答案(最全版本持续更新)

主宰稳场 提交于 2020-05-08 16:18:18
前言 涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文末自取pdf. 1、您对微服务有何了解? 2、微服务架构有哪些优势? 微服务的 优点 – 微服务访谈问题.: 独立开发 – 所有微服务都可以根据各自的功能轻松开发 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起 3、微服务有哪些特点? 微服务的 特点 – 微服务访谈问题 : 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展 组件化 – 微服务被视为可以轻松更换和升级的独立组件 业务能力 – 微服务非常简单,专注于单一功能 自治 – 开发人员和团队可以彼此独立工作,从而提高速度 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式