今天,我们开始Java高并发与多线程的第二篇,线程的实现方式. 通常来讲,线程有三种基础实现方式,一种是继承Thread类,一种是实现Runnable接口,还有一种是实现Callable接口,当然,如果我们铺开,扩展一下,会有很多种实现方式,但是归根溯源,其实都是这几种实现方式的衍生和变种. 我们依次来讲. [第一种 · 继承Thread] 继承Thread之后,要实现父类的run方法,然后在起线程的时候,调用其start方法. 1 public class DemoThreadDemoThre…
今天,我们开始Java高并发与多线程的第四篇,锁. 之前的三篇,基本上都是在讲一些概念性和基础性的东西,东西有点零碎,但是像文科科目一样,记住就好了. 但是本篇是高并发里面真正的基石,需要大量的理解和实践,一环扣一环,环环相扣,不难,但是需要认真去读. 好了,现在开始. --------------第一部分,咱们要谈到java里面的两个用于保证线程之间有序性的关键字-------------- [synchronized] synchronized是Java中解决并发问题的一种最常用的方法,也是…
今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型String 可以不设置,默认值为Thread-线程编号 线程类别(Daemon) 类型boolean 主要用于区分用户线程和守护线程 值为true表示该线程为守护线程,否则为用户线程 默认值与相应线程的父线程该属性值相同,该属性必须在线程启动前设置!否则会报错 用户线程 用户行为运行的线程: 一个Ja…
其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直没写. 但是想了想既然之前有这个想法,而且也已经好久没有写过博客了,索性还是写一写,尽量写的有意思一点. 另:之前的高并发&性能优化没有来得及往下写,实在是因为里面的东西太过于复杂,且最近正好换了工作,确实没有那么多时间去研究,现在写东西还是希望能多写点有用的,而不是书本照搬当笔记用,当然能力有限,…
1. 什么是线程? 线程和进程的区别 在了解线程的概念前,我们应该先知道什么是进程? 进程是操作系统的基本概念之一, 它是正在执行的程序实例. * 下面的一些进程的基本概念你可以了解下 -------------------------------------------------------------------- 操作系统逻辑上将一个进程分为以下几部分(段): # 文本 程序的指令 # 数据 程序使用的静态变量 # 堆 程序可从该区域动态分配额外内存 # 栈 随函数调用和返回而增减的一片…
java高并发系列-第1天:必须知道的几个概念 同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为.异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作.而异步方法通常会在另外一个线程中"真实"地执行.整个过程,不会阻碍调用者的工作. 如图: 上图中显示了同步方法调用和异步方法调用的区别.对于调用者来说,异步调用似乎是一瞬间就完成的…
这是java高并发系列第16篇文章. 本篇内容 介绍CountDownLatch及使用场景 提供几个示例介绍CountDownLatch的使用 手写一个并行处理任务的工具类 假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要统计解析总耗时.分析一下:解析每个sheet耗时可能不一样,总耗时就是最长耗时的那个操作. 我们能够想到的最简单的做法是使用join,代码如下: pack…
JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要原因是并发程序中数据访问一致性和安全性将会受到严重挑战.如何保证一个线程可以看到正确的数据呢?这个问题看起来很白痴.对于串行程序来说,根本就是小菜一碟,如果你读取一个变量,这个变量的值是1,那么你读取到的一定是1,就是这么简单的问题在并行程序中居然变得复杂起来.事实上,如果不加控制地任由线程胡乱并行,即使原本是1的数值,你也可能读到2.因此我们需要在深入了解并行机制的前提下,再定义一种规则,保证多个线程间可以有小弟,正确地…
进程和线程的区别和联系 从资源占用,切换效率,通信方式等方面解答 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元:而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务.在引入了线程的操作系统中,通常一个进程都有若干个线程,至少需要一个线程.下面,我们从调度.并发性. 系统开销.拥有资源等方面,来比较线程与进程. 1.调度 在传统的操作系统中,拥有资源的基本单位和独立调度.分派的基本单位都是进程.…
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求,而且也能怎么你在整个项目中的一个处理逻辑的能力体现.那么,你真的知道什么是高并发吗?这不是一个很简单的话题.高并发,往往会牵扯到很多的问题,如何才能快速响应,如何处理各个线程之间的交互,如何完成逻辑之间的高负载运转,甚至,一个系统,如果没有做好前期高并发的合理配置,整个产品会遇到瓶颈,以及不可预期的…