java并发

【面试普通人VS高手系列】lock和synchronized区别

今天来分享一道阿里一面的面试题,“lock和synchronized的区别”。 对于这个问题,看看普通人和高手的回答! #普通人: 嗯,lock是J.U.C包里面提供的锁,synchronized是Java中的同步关键字。 他们都可以实现多线程对共享资源访问的线程安全性。 #高手: 下面我从4个方面 ... »

SimpleDateFormat类的安全问题,这6个方案总有一个适合你

摘要:你使用的SimpleDateFormat类还安全吗?为什么说SimpleDateFormat类不是线程安全的?带着问题从本文中寻求答案。 本文分享自华为云社区《【高并发】SimpleDateFormat类的线程安全问题和解决方案(附6种解决方案)》,作者: 冰 河。 首先问下大家:你使用的Si ... »

并发编程进阶

并发编程进阶 在我们的程序中,多多少少都会用到多线程技术,而我们以往都是使用Thread类来创建一个新的线程: public static void main(String[] args) { Thread t = new Thread(() -> System.out.println("Hello ... »

zwtblog

【面试普通人VS高手系列】Fail-safe机制与Fail-fast机制分别有什么作用

前段时间一个小伙伴去面试,遇到这样一个问题。 ”Fail-safe机制与Fail-fast机制分别有什么作用“ 他说他听到这个问题的时候,脑子里满脸问号。那么今天我们来看一下,关于这个问题,普通人和高手应该如何回答吧。 普通人的回答 额… . 嗯 … 高手的回答Fail-safe和Fail-fast ... »

谈谈高并发系统的一些解决方案

本文结合项目经验,整理一份大纲,供参考。 常用指标 RT(Response Time):响应时间。可能会衍生出 TP999、TP99、TP95、TP90等指标。一般在几毫秒到几百毫秒之间。 QPS(Query Per Second):每秒查询量。这是我们最常说的一个指标了。视业务复杂度不同而不同,轻 ... »

Java并发编程异步操作Future和FutureTask

码农在囧途 生活是一个洗礼自己的过程,这个洗礼并不是传统意义上的洗礼,传统意义上的洗礼通常认为这个人的思想得到洗礼,灵魂得到洗礼,十分的清新脱俗,不世故,不圆滑,而现实的洗礼实则是让一个人褪去幼稚,褪去无知,让你变得点头哈腰,圆滑世故,我们都是动物,需要物质满足,更需要欲望填补,所以,变成自己小时候 ... »

java并发编程:Executor、Executors、ExecutorService

Executor:一个接口,其定义了一个接收Runnable对象的方法executor,其方法签名为executor(Runnable command),该方法接收一个Runable实例,它用来执行一个任务,任务即一个实现了Runnable接口的类,一般来说,Runnable任务开辟在新线程中的使用方法为:new Thread(new RunnableTask())).start(),但在Exec »

Java并发编程:volatile关键字解析  

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有 »

Java并发之彻底搞懂偏向锁升级为轻量级锁

网上有许多讲偏向锁,轻量级锁的文章,但对偏向锁如何升级讲的不够明白,有些文章还相互矛盾,经过对jvm源码(biasedLocking.cpp)的仔细分析和追踪,基本升级过程有了一个清晰的过程,现将升级流程阐述如下:      因为偏向锁,锁住对象时,会写入对象头相应的标识,我们先把对象头(官方叫法为:Mark Word)的图示如下(借用了网友的图片):            通过上面的图片,我们可 »

java并发:CopyOnWrite机制

java.util.concurrent.CopyOnWriteArrayList是一个线程安全的 ArrayList,其修改操作是在底层的一个复制的数组(快照)上进行的,即用了写时复制策略。 其定义如下: public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneabl »

【转】Java并发编程:如何创建线程?

一、Java中关于应用程序和进程相关的概念   在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认是java.exe或者javaw.exe(windows下可以通过任务管理器查看)。Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程。但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一个线程 »

Java并发编程系列之三十二:丢失的信号

这里的丢失的信号是指线程必须等待一个已经为真的条件,在開始等待之前没有检查等待条件。这样的场景事实上挺好理解,假设一边烧水,一边看电视,那么在水烧开的时候。由于太投入而没有注意到水被烧开。 丢失的信号指的就是这样的情况。 创建两个线程分别运行通知和等待方法,而且将运行通知的线程先与运行等待的线程,以下的代码演示了这点: package com.rhwayfun.patchwork.con »

Java并发编程基础

Java并发编程基础 线程简介 什么是线程 现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(LightWeight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这 »

Java并发(7):阻塞队列

  在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。   使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从 »

转: 【Java并发编程】之十三:生产者—消费者模型(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17249321       生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。     这里实现如下情况的生产--消费模型:     生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名 »

java并发编程(九)----(JUC)CyclicBarrier

上一篇我们介绍了CountDownlatch,我们知道CountDownlatch是“在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待”,即CountDownLatch的作用是允许1或N个线程等待其他线程完成执行,而我们今天要介绍的CyclicBarrier则是允许N个线程相互等待。 1.CyclicBarrier简介 CyclicBarrier 的字面意思是可循环使用 »

java并发之CountDownLatch

一、简介 CountDownlatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 它本身而言是Java并发包中非常有用的一个类,它可以让某些任务完成以后再继续运行下面的内容,每个任务本身执行完毕后让计数器减一,直到计数器清零后,以下的内容才可以继续运行,否则将阻塞等待。 二、应用场景 想了一下,这个场景非常适合用于项目中这样的场景: 我们有个项目,它需 »

Java并发包分析——BlockingQueue

之前因为找实习的缘故,博客1个多月没有写了。找实习的经历总算告一段落,现在重新更新博客,这次的内容是分析Java并发包中的阻塞队列 关于阻塞队列,我之前是一直充满好奇,很好奇这个阻塞是怎么实现。现在我们先看一个该抽象类的实现类ArrayBlockingQueue。下面全部的代码均在github ArrayBlockingQueue ArrayBlockingQueue顾名思义是一种数组形式的阻塞队 »

Java并发/多线程系列——线程安全篇(1)

Java线程是个对象,和其他任何的Java对象一样。线程是类的实例java.lang.Thread,或该类的子类的实例。除了对象之外,java线程还可以执行代码。 创建和启动线程 在Java中创建一个线程是这样完成的: Thread thread = new Thread(); 要启动Java线程,您将调用其start()方法,如下所示: thread.start(); 此示例不指定要执 »