作为业务开发人员,能够在工作中用到的技术其实不多。虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上。因为,我们用的框架已经把这些事做掉了。

  比如web开发,外面有大量的请求进来,按理说,我们应该考虑并发问题。但其实,spring接到请求,分配到controller之后,就已经是线程安全的了,所以我们要做的就是,从controller开始,到最后请求响应结束,保证线程安全即可。

  多线程好像有很多东西需要注意,阅读《Java 多线程编程核心技术》后,做个总结,总体来说,其实也没那么多事,没那么复杂。

1. 多线程基础

  java的多线程,就体现在Thread类与Runable接口!共享数据,才存在线程安全问题,不共享数据不存在线程安全。java的很多停止线程的方法已经废除,不建议使用如: resume,stop,suspend方法。设置线程优先级(setPriority)可能提高线程执行的速度。守护线程的存在需要至少一个非守护线程在运行,也就是说守护线程不能独立存在,其能力是比较低的,比如GC就是守护线程,当你的代码在执行时,GC就在运行,随时进行内存回收,当你的程序执行完成后,GC线程就不存在了。

2. 对象及变量的并发访问

  synchronized同步方法,锁对象,锁代码块,锁方法,锁变量,

  valatile关键字,使用volatile线程解决同步死循环不停止问题。volatile强制从公共堆中获得变量的值,使保持一致性。

3. 线程间通信

  wait/notify 是最基本的实现线程间通信的方式。很方便的实现了,消费者/生产者模式。

  wait方法后,立即释放锁,notify锁不释放。即wait方法执行后,后续并发请求即可进入该块,而notify则需要等到synchronized代码块执行完成后,才会释放锁。

  notifyAll()唤醒所有等待线程。

  join()方法释放锁等待线程执行完成。Thread.sleep()不释放锁等待。

  通过管道进行通信,以字符流形式传递。PipeWriter,PipeReader,outputSream.connect(inputStream)将输入流与输出联系在 一起。

  ThreadLocal,可认为是一个线程级的全局变量,即在本线程中,随处都可以取到该值,而不必担心线程安全问题。set(),get()方法进行设置与取用。

4. Lock的使用

  ReentrantLock,

5. 定时器timer

  timer.schedule(task, dateRef) 执行一次, timer.schedule(task, dateRef, period) 周期性执行。
6. 单例模式与多线程

  if(obj == null) {
    synchronized(MyObject.class) {
      if(obj == null) {
        obj = new MyObject();
      }
    }
  }

  额,这么看来,多线程的知识还是好少呢。东西不要太多,够精就行!

不用害怕多线程,不用害怕并发!

《Java 多线程编程核心技术》- 笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. Spring的xml配置文件中约束的必要性 找不到元素 'beans' 的声明

    今天在复习Spring MVC框架的时候,只知道xml配置文件中的约束有规范书写格式的作用,所以在配置HandlerMapping对象信息的时候没有加入约束信息之后进行测试,没有遇到问题.后来在配置S ...

  2. 一个不错的多叉树, stl风格

    tree<std::string> tr9; tree<std::string>::pre_order_iterator iter1; tr9.set_head("h ...

  3. Spring Cloud Eureka的集群配置(六)

    1.再次创建2个Eureka工程 工程名:microservicecloud-eureka-7002 工程名:microservicecloud-eureka-7003 2.pom.xml文件 < ...

  4. 探索未知种族之osg类生物---渲染遍历之裁剪一

    前言 上面我们用了四节课的内容,讲解了一些osg概念性的内部原理.希望大家可以再看今天的讲解之前先再仔细的研究一下前四节的内容.这样你就会对整个osg的渲染过程有一个更加清晰的认知,有助于理解下面两个 ...

  5. core里使用log4net

    1. nuget 里安装 log4net 2. startup.cs里配置读取配置文件 public static ILoggerRepository repository { get; set; } ...

  6. 为什么禁止在 foreach 循环里进行元素的 remove/add 操作

    首先看下边一个例子,展示了正确的做法和错误的错发: 这是为什么呢,具体原因下面进行详细说明: 1.foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数 ...

  7. linux常用命令简介

    不管是测试还是开发,平时或多或少都要用到Linux命令,下面就把平时必用的一些命令简单总结哈,快学快用 1.   ls : 列举当前目录下文件.子目录的名字,如图举例: (1)  ls  -l  : ...

  8. 数据统计 任务的一点感想 , sql 使用中的坑。

    需求: 多张表(个数不定,需求不是非常明确,只有一个大致需求)根据业务需求统计出一些数据 (按天统计,数据有多条校验规则)进行上传. 注意: 校验数据是否正确是需要第三放来反馈的,而且第三方的测试环境 ...

  9. 【Selenium】【BugList10】smtp发送邮件问题汇总:550/535/554

    [场景] 通过126邮箱向QQ邮箱发送HTML格式邮件 [代码1] from email.mime.text import MIMEText from email.header import Head ...

  10. vue + spring boot + spring security 前后端分离 携带 Cookie 登录实现 只写了个登录

    最近想弄一下vue 所以就自己给自己找坑入   结果弄的满身是伤 哈哈哈 首先我说下 前后端分离  跨域请求  我在网上找了一些  可是都是针对于 spring boot 的 我自己还有 securi ...