Java并发与多线程
Java并发与多线程
SEMINECES
这个作者很懒,什么都没留下…
展开
-
深入理解Java并发编程(四):CAS操作以及jdk1.8后的优化
一、前言说到CAS之前,先来看看乐观锁与悲观锁:悲观锁认为:每个线程在对一数据进行操作时,都会有其他线程来并发修改,所以在获取数据的时候就上锁来进行操作,synchronized和lock就是一种悲观锁的策略。也就是先上锁再操作。乐观锁认为:每个线程在对以数据进行操作时,没有其他线程来并发修改,这样就其实是所有线程都去读取共享区的数据,然后在本地工作内存操作,最后看共享区的数据有无被其他线程更新。如果没有则将修改后的数据写入,如果有的话就根据具体实现具体分析(报错或者自动重试)。即直接操作我们不难得原创 2020-07-12 16:21:27 · 555 阅读 · 0 评论 -
深入理解Java并发编程(三):volatile关键字详解
一、volatile关键字简介synchronized关键字是阻塞式同步,在线程竞争激烈的时候会逐渐由偏向锁膨胀为重量级锁。而volatile是JVM提供的最轻量级的同步机制。JMM告诉我们各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。不过线程在工作内存中进行操作后将会何时写入主内存中?这个时机普通机制是没有规定的。volatile一般用于修饰会被不同线程访问和修改的变量,而针对volatile修饰的变量给JVM给了规定:线程对volatile变量的修改会原创 2020-07-12 11:01:58 · 210 阅读 · 0 评论 -
深入理解Java并发编程(二):synchronized关键字详解
前言:如何处理共享数据的安全问题?让每一个线程依次的去读取这个共享数据,这样就不会有任何的数据安全问题了,因为每次每个线程所操作的都是最新的数据,不会出现脏读的现象。synchronized关键字就是使每个线程依次排队操作共享变量,也就是用来处理共享数据的安全性问题。不过这种同步机制的效率很低。一、使用范围在Java代码中,synchronized关键字可以用在代码块和方法中:方法: 1.实例方法:被锁的是该类的实例对象 public synchronized void method() {原创 2020-07-12 10:07:09 · 154 阅读 · 0 评论 -
深入理解Java并发编程(一):JMM(Java内存模型)详解
一、JMM是什么?JMM是一个抽象的概念:描述的是一组围绕原子性、有序性、可见性的规范。定义程序中各个变量的访问规则,即虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量是共享变量。JMM规定:所有共享变量存储在主内存中,每条线程有自己的工作内存,线程的工作内存保存了被该线程使用到的变量的主内存副本,线程对变量的所有操作都必须在工作内存上进行,线程不能直接读写主内存的共享变量。不同的线程之间也无法访问对方工作内存中的变量,线程间的变量值的传递均需通过主内存来完成。共享变量:所有实原创 2020-06-24 12:00:54 · 408 阅读 · 0 评论 -
写2个线程,其中一个线程打印1~52,另一个线程打印A~Z,打印顺序应该是12A34B...
写代码才发现了自己的问题就是学的不精。。首先写一个Print类:public class Print{ private boolean flag = true; private int number = 0; public void printNumber() throws Exception{ if(!flag){ this.w...原创 2019-08-09 11:51:15 · 493 阅读 · 0 评论 -
Java多线程基础(包括:线程的创建、状态生命周期、控制线程、线程同步、死锁、线程通信、线程池的基础知识)
一、引入与线程概述为什么要搞多线程?单线程的程序只有一个顺序执行流,多线程的程序则可以包括多个程序执行流,多个顺序流之间互不干扰。几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。当一个程序进入内存运行时,即变成一个进程。一般而言,进程包含如下三个特征:独立性:进程是...原创 2019-07-23 11:04:36 · 214 阅读 · 0 评论