Java并发
「已注销」
这个作者很懒,什么都没留下…
展开
-
交替打印A1B2C3-Java多线程实现方式
1. LockSupportpackage com.example.demo;import java.util.concurrent.locks.LockSupport;/** * coder:ZhangYang * 使用LockSupport的方式打印 */public class PrintA1B2 { static Thread t1 = null; static Thread t2 = null; public static void main(Strin原创 2020-05-31 17:38:54 · 3348 阅读 · 2 评论 -
Java并发编程之Java多线程(二)
文章目录线程间的通信volatilesynchronizedwait和notify(等待/通知机制)管道输入输出流ThreadLocal数据库连接池的实现线程间的通信volatilevolatile修饰的变量,程序访问时都需要在共享内存中去读取,对它的改变也必须更新共享内存,保证了线程对变量访问的可见性synchronized对于 同步块 的实现使用了monitorenter和monitorexit指令,而 同步方法 则是依靠方法修饰符上的ACC_SYNCHRONIZED来完成的。无论采用哪原创 2020-05-31 10:21:06 · 186 阅读 · 1 评论 -
Java并发系列之Java多线程(一)
线程线程的简介什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。为什么要是用多线程目前的处理器核心越来越多,使用多线程能有更快的响应时间,并能有更好的编程模型。线程的优先级现代操作系统基本采用时分的形式调度运行的线程,操作系统分出每一个时间片会根据线程的优先级来分配,优先级越高的最先获取执行资源。在Java线程中,通过一个整型成员变量priority原创 2020-05-31 00:38:28 · 311 阅读 · 0 评论 -
单例模式的Java实现模式
单例模式的实现1.懒汉模式(线程不安全)public class Singleton{ private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instace == null){ instance=new Singleton(); } return instance; }}如上,通过提供一个静态的对象instance,利用priva原创 2020-05-30 20:15:30 · 204 阅读 · 1 评论 -
Java并发之Java内存模型
文章目录Java内存模型内存模型的基础Java内存模型的抽象结构happens-before的原则介绍volatile内存语义锁的内存语义final域的内存语义双重检查锁定与延迟初始化Java内存模型内存模型的基础并发编程的两个关键问题线程之间如何通信共享内存的并发模型:通过读写内存中的公共状态来进行隐式通信。消息传递的并发模型:没有公共状态,只能通过发送消息来现实的进行通信。线程之间如何同步同步是指程序中用于控制不同线程间操作发生相对顺序的机制共享内存的并发模型:同步显示进行原创 2020-05-30 19:32:14 · 144 阅读 · 0 评论 -
Java并发之Java并发机制的底层实现原理
Java并发机制的底层实现原理Java代码编译之后得到Java字节码,被类加载器加载到JVM中,最终转化为汇编指令,Java的并发机制依赖于JVM的实现和CPU指令并发编程的3个基本概念原子性可见性有序性原子性解释:原子性即一个操作或者多个操作,要么全部执行成功并且不被外界因素所打断,要么全部不被执行。简而言之,要么成功,要么失败,没有中间立场。原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中原创 2020-05-30 18:04:46 · 193 阅读 · 0 评论 -
Java并发编程之基础的理解
JUCJava JDK中的一个安全包。全程 java.util.concurrent包,在此包中增加了在并发编程中很常用的工具类,用于定义类似线程的自定义子系统,包括线程池,异步IO和轻量级任务框架;还提供了设计用于多线程上下文中的Collection实现等。JUCAtomicLockscollectionsexecutortools上下文切换单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,原创 2020-05-30 12:56:48 · 169 阅读 · 0 评论 -
Java内存模型以及happens-before
1. JMM的介绍在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了。在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题?我的认识是,在多线程下代码执行的结果与预期正确的结果不一致,该代码就是线程不安全的,否则则是线程安全的。虽然这种回答似乎不能获取什么内容,可以google下。在<<深入理解Java虚拟机>>中看到的定义。原文如下:当多个线程访问同一个对象时,如果不用考虑这原创 2020-05-09 17:03:32 · 136 阅读 · 0 评论 -
Java并发-线程状态转换以及基本操作
在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论。那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员都应该具备这样的技能。万事开头难,接下来就应该了解如何新建一个线程?线程状态是怎样转换的?关于线程状态的操作是怎样的?这篇文章就主要围绕这三个方面来聊一聊。1. 新建线程一个java程序从main()方法开始原创 2020-05-09 16:56:46 · 136 阅读 · 0 评论 -
java-并发编程的优缺点
一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的"摩尔定律",可能会奇怪明明讨论的是并发编程为什么会扯到了硬件的发展,这其中的关系应该是多核CPU的发展为并发编程提供的硬件基础。摩尔定律并原创 2020-05-09 16:53:07 · 175 阅读 · 0 评论