并发
和尚不洗碗
不断努力学习,提供自己的能力。学习+思考+坚持=成功。
展开
-
Java高并发学习(七)
Java高并发学习(7)程序中的幽灵:隐蔽的错误 作为一名软件开发人员,修复BUG应该是基本的日常工作之一。作为java程序员,也许你经常会被抛出的一大堆异常堆栈所困扰。因为这可能预示着你又有工作可做了。但是我在这里想说的是,如果程序出错,你看到了异常堆栈,那你应该感到格外的高兴。最可怕的情况是:系统没有任何异常表现,没有日志,也没有堆栈。但是却给出了个错误的执行结果,这种情况才让你抓狂...转载 2018-10-18 08:56:16 · 140 阅读 · 0 评论 -
Java高并发学习(五)
Java高并发学习(5)先干重要的事:线程优先级Java中的线程可以有优先级。优先级高的线程在竞争资源时更有优势。当然这只是一个概率问题。如果运气不好,高优先级的线程也可能抢占失败。在java中使用1到10表示线程的优先级。一般用静态标量表示:public final static int MIN_PRIORITY = 1;public final static int MIN...转载 2018-10-18 08:49:07 · 113 阅读 · 0 评论 -
Java高并发学习(四)
Java高并发学习(四) 驻守后台:守护线程(Daemon) 守护线程是一种特殊的线程,他是系统的守护者,在后台默默的完成一些系统性的服务。比如垃圾回收线程,JIT线程也可以理解为守护线程。与之相对应的是用户线程,用户线程可以认为是系统的工作线程,他会完成这个程序应该要完成的业务操作。如果用户线程全部结束了,这也意味着这个程序实际上无事可做了。守护线程要守护的线程已经不存在了,那么整...转载 2018-10-18 08:48:57 · 91 阅读 · 0 评论 -
Java高并发学习(三)
ava高并发学习(三) 分门别类的管理:线程组在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将功能相同的线程放置在一个线程组里。 构造方法:ThreadGroup(String name):以指定线程组名字来创建新线程组ThreadGroup(ThreadGroup parent,String name):以指定的名字、指定的父线程组来创建一个新线程组。...转载 2018-10-18 08:48:47 · 355 阅读 · 0 评论 -
Java高并发学习(二)
Java高并发学习(二) volatile与java内存模型(JMM) Java的内存模型都是围绕着原子性,有序性和可见性展开的。为了在适当的场合,确保线程间的原子性,有序性,可见性。Java使用了一些特殊的操作或者关键字来声明,告诉虚拟机,在这个地方,要尤其注意,不能随意的优化目标指令。关键字volatile就是其中之一。 当你用volatile来声明一个变量时,就等于告诉...转载 2018-10-18 08:48:36 · 129 阅读 · 0 评论 -
Java高并发学习(一)
Java高并发学习(一)初始线程:线程的基本操作进行java并发设计的第一步,就是必须了解Java虚拟机提供的线程操作的API。比如如何创建并启动线程,如何终止线程,中断线程等。1.定义线程:(1).继承Thread方法,形式如下 public static class T1 extends Thread{ @Override publi...转载 2018-10-18 08:48:20 · 484 阅读 · 0 评论 -
并发与高并发的相关知识———基础与概念(一)
最近在视频学习Java中并发与高并发的一些相关课程。目前已经学完了这门课程的基础知识部分,为了加深对知识的印象和理解,所以想写篇文章来加深下,也希望能带给读者们一些帮助。因为本人的知识和能力有限,有些知识点理解的不到位,希望大家多多指点和提出建议。这门课程基础知识主要是分几大块来讲解的:并发与高并发相关概念、CPU多级缓存,缓存一致性、Java内存模型JMM规定,抽象结构同步操作与规则、并发优...转载 2018-10-17 09:20:41 · 176 阅读 · 0 评论 -
线程间通信与协作方式之——synchronized关键字
在这篇文章中,我会为大家介绍一下synchronized关键字的用法。同样,我会尝试用比较容易理解的方式去介绍,以求让大家都能够看明白,想清楚。 synchronized是什么synchronized是一种锁机制,那么肯定有童鞋会问:什么是锁?为什么要用锁?怎么使用锁? 接下来我就分别针对这个经典三连问来详细解释一下。1.什么是锁?计算机的世界中并没有锁这个实体概念,而所谓锁就...转载 2018-10-18 08:48:01 · 161 阅读 · 0 评论 -
线程间通信与协作方式之——volatile关键字
上两篇文章我向大家介绍了一些线程间的基本通信方式,那么这篇文章就和大家聊聊volatile关键字的相关知识。这个关键字在我们的日常开发中很少会使用到,而在JDK的Lock包和Concurrent包下的类则大量的使用了这个关键字,因为它有如下两个特性:1.确保内存可见性 2.禁止指令重排序接下来就针对这两点特性来进行分析,我会尽量用最能够被理解的语言去阐述相关知识点。 什么是...转载 2018-10-18 08:47:45 · 131 阅读 · 0 评论 -
线程间通信与协作方式之——wait-notify机制
大家好,上篇文章为大家介绍了线程间通信和协作的一些基本方式,那这篇文章就来介绍一下经典的wait-notify机制吧。 什么是wait-notify机制?想象一下有两个线程A、B,如果业务场景中需要这两个线程交替执行任务(比如A执行完一次任务后换B执行,B执行完后再换A执行这样重复交替),之前的基本通信方式只能让线程暂停一段指定时间,Join方法也无法做到这种交替执行的要求,那怎么办呢...转载 2018-10-17 09:37:51 · 126 阅读 · 0 评论 -
线程间通信与协作方式之——基本方式
在上篇文章中,我讲解了关于并发主题的一些基础知识,使大家对于线程有了一个初步的概念。那么今天我就来为大家讲解一下线程之间是如何通信以及它们是怎样协作的。 1.Thread.join()方法 想象一下有两个线程A、B,线程A需要等待线程B执行完毕后才能继续执行,那么此时就可以用join方法来实现。 1 public class JoinThread { 2 3 p...转载 2018-10-17 09:37:03 · 135 阅读 · 0 评论 -
并发基础知识
首先推荐一本讲并发的好书:JAVA并发编程实战。这本书非常完整的讲解了关于并发的知识点,是一本不可多得的好书,如果有时间一定要多看几遍。下面放一张并发主题的思维导图(受限于网页大小,请童鞋们自行下载图片浏览)(原文无法下载该图片):从这张图中可以看到并发相关的知识点非常多并且非常杂,我们这个主题不可能把这里边所有罗列的知识点全部深入讲解一遍,所以我在这里只能挑选一些相对比较重要的知识点...转载 2018-10-17 09:35:56 · 126 阅读 · 0 评论 -
Java中多线程并发体系知识点汇总
一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进...转载 2018-10-19 09:16:48 · 145 阅读 · 1 评论 -
java高并发学习(九)-----多线程的团队协作:同步控制
Java高并发学习(八)-------多线程的团队协作:同步控制 同步控制是并发程序必不可少的重要手段。之前介绍的synchronized关键字就是一种最简单的控制方法。同时,wait()和notify()方法起到了线程等待和通知的作用。这些工具对于实现复杂的多线程协作起到了重要的作用。接下来将介绍synchronized,wait,notify方法的代替品(或者说是增强版)——重入锁...转载 2018-10-19 09:16:35 · 187 阅读 · 1 评论 -
Java高并发之线程通信(八)---管道
Java高并发之线程通信(管道)Java管道原理:广义上讲,管道就是一个用来在两个实体之间单项数据传输的导管。Java中的管道和linux中的管道是一样的,从本质上说,管道也是一种文件。实际上原理很简单,如下图所示:管道流特点:1. 管道数据流向的单向的,数据只能从一个进程(线程)流向另一个进程(线程),如果要进行双向通信,必须建立两个管道。 2. 管道的读数据是一...转载 2018-10-18 09:03:17 · 253 阅读 · 0 评论 -
Java高并发学习(六)
Java高并发学习(6)线程安全的概念与synchronized并行程序开发的一大关注点是线程安全问题。由于读写者问题产生的错误,会导致数据不一致。虽然在使用volatile关键字后这种错误情况有所改善。但是,volatile并不能真正的保证线程安全。他只能保证一个线程修改数据后其他线程能看到这个改动。但当两个线程同时修改一个数据时,依然会产生冲突。下面代码演示了一个计数器,两个线程同...转载 2018-10-18 08:49:18 · 102 阅读 · 0 评论