Java并发编程实战

程序等待某个同步IO操作完成,CPU将处于空间状态。

 

 

 

线程安全---多个线程交替访问某个类,调用方不需做任何的同步,这个类始终表现出正确的行为

  1. 不共享变量
  2. 变量是不可变
  3. 访问变量使用同步

 

 

synchronized除了实现原子性(确定临界区),保证了内存可见性(一个线程修改了变量后,其他线程能够看到)

 

 

 

 

14章

sleep进入休眠,但有可能这是不必要的

忙等待,消耗过多的CPU时钟

Thead.yield给调度器一个提示,让出一定的时间给另一个线程运行

一般是二选一,第三个感觉不靠谱,有平台相关性。sleep抛异常,yield不抛

 

优先使用notifyAll(虽然效率低一些,但容易保证准确),同时满足才能使用notify

等待线程的类型都相同

每次通知只能唤醒一个线程

 

synchronized、reentrantlock区别

reentrantlock有公平锁、非阻塞(防止死锁)、可以绑定多个条件

 

AQS只可能在一个地方阻塞,通过CAS实现

 

 

15章

通过原子变量和非阻塞的同步机制提高性能和可伸缩性,将发生竞争的范围缩小到单个变量上,粒度更细

 

         Java的锁(例如重入锁)语法简洁,但实现不简单,至少需要一次CAS

 

         CAS缺点:调用者自己处理竞争问题(重试、回退、放弃),锁能自动处理(线程在获得锁之前一直阻塞)

 

         如果操作系统不支持CAS,JVM将使用自旋锁

 

在中低程序的竞争中,原子变量提供更高的可伸缩性。高强度的竞争中,锁能有效避免竞争。

当交通更拥堵,信号灯能实现更高的吞吐量,低拥堵的时候,环岛能实现更高吞吐量

 

创建非阻塞算法的关键在于找出如何将原子修改的范围缩小到单个变量,维护数据的一致性,CAS+volatile

JDK升级提到的性能提升主要来自于非阻塞算法的应用

 

 

16章

         在共享内存的多处理器架构中,每个处理器都有自己的缓存,定期与主存同步

 

         内存屏障---强制刷新缓存

 

         Happens-Before---两个操作如果缺少Happens-Before关系了,JVM会重排序(同步解决)

         Happens-Before规则

                   监视器锁规则:在同一个监视器锁上,解锁操作在加锁操作之前执行

 

         DCL要使用volatile

 

         初始化安全性---含有final域的对象,可以防止对象的初始引用被重排序到构造过程之前。

         不是final域,或者存在除构造函数以外的其他方法能修改

转载于:https://www.cnblogs.com/jasonChung/p/6911111.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring mvc ModelAndView向前台传值

今天在做项目的时候遇到一个问题,把第一个页面保存的id传到第三个页面中去用,原来是在controller层加了一个全局变量控制的,可是后来发现这个变量实现不了我要的功能,于是查了一下,原来ModelAndView这个类有个构造方法…

go-zero微服务实战系列(三、API定义和表结构设计)

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

mongo经验总结

http://wenku.baidu.com/view/7c279cbfc77da26925c5b0e4.html转载于:https://www.cnblogs.com/yuechaotian/archive/2013/02/19/2916692.html

STM32 串口DMA接收 Openmv / K210 整数、小数字符串数据 (基于HAL库)

目录前言一、工程配置二、串口DMA部分代码1.源文件UART_DMA.c2.头文件UART_DMA.h3.stm32f1xx_it.c的修改4.串口收发DMA测试三、字符串数字提取代码1.源文件NumAndStr.c:2.头文件NumAndStr.h:3.测试:四、Openmv / K210 发送、STM32接收测试总结修订版本UART_DMA.cUART_DMA.h平台…

6000字|22张图 带你彻底弄懂Zookeeper分布式锁

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

静态与非静态(转改)

这里有一个C的测试,由于c#的sizeof不能对一般类使用,所以没法试验。 class Test {int i;static int j;void Method1() { printf("Method1"); };void Method2() { printf("Method2"); };void Method3() { printf("Method3"…

【HDU2896】病毒侵袭——ac自动机

网上很多代码都略显繁琐,看了一下yy dalao的代码感觉很好,但他懒得打题解(好吧我也是 以0为根节点的话,我把yy的一段代码删了改用fail[c]x0?0:ch[fail[x]][i];来实现特判,效果还不错!也算是AC自动机的模版…

经典 HTML5 Javascript 俄罗斯方块游戏

Blockrain.js 是一个使用 HTML5 & JavaScript 开发的经典俄罗斯方块游戏。只需要复制和粘贴一段代码就可以玩起来了。最重要的是,它是响应式的,无论你的显示屏多么宽都能自动匹配。你可以自定义你想要的颜色以适应您的网站,也可以调整方块…

【电赛PID半天入门】从接触编码器到调出好康的PID波形

从接触编码器到调出好康的PID波形认识电机及编码器只需动动手指,就能让STM32得到电机转过的角度让电机转起来认识PID控制①比例调节器②积分调节③微分调节④比例积分微分调节数字PID调节器(1)数字PID位置型控制算法(2&#xff09…

算法的复杂度分析

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

PHP面向对象 封装与继承

知识点: PHP封装三个关键词: 一、public 公有的,被public修饰的属性和方法,对象可以任意访问和调用 二、private 私有的,被private修饰的属性和方法,只能在类内部的方法可以进行调用,或者被子类…

POJ 1380 坐标旋转

题意&#xff1a; 问第二个矩形能不能放进第一个矩形中。 题解&#xff1a; 暴力旋转第二个矩形&#xff0c;判断左右、上下是否同时小于第一个矩形 当然&#xff0c;数学推导也可以&#xff0c;挺简单的相似神马的胡搞就行~ View Code 1 #include <iostream>2 #include…

冲刺省选习题集

1.火柴棒等式 单击此处看题目 考察算法&#xff1a;数学分析枚举 1 #include <iostream>2 #include <cstdio>3 using namespace std;4 5 const int match[10]{6,2,5,5,4,5,6,3,7,6};6 7 int n;8 9 int merge(int x){ 10 int sum0; 11 if(x0)return 6; 12 …

MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

目录一、新建工程二、时钟树时钟系统结构时钟系统的原理时钟树配置实战三、点灯工程师封装好的初始化函数平台&#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、新建工程 二、时钟树 时钟系统结构 &#xff08;1&…

解决maven依赖冲突,这篇就够了!

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

SOAP 1.1 - 学习

SOAP 1.1 --- 每天发送SOAP request&#xff0c;不搞明白啥叫SOAP,惭愧 SOAP 1.1 XML 架构定义 <xs:schema xmlns:xs"http://www.w3.org/2001/XMLSchema" xmlns:tns"http://schemas.xmlsoap.org/soap/envelope/" targetNamespace"h…

Codeforces Round #168 (Div. 2)---A. Lights Out

Lights Outtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputLenny is playing a game on a 3  3 grid of lights. In the beginning of the game all lights are switched on. Pressing any of the lights will tog…

【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

hiho模拟面试题2 补提交卡 (贪心,枚举)

题目&#xff1a; 时间限制:2000ms单点时限:1000ms内存限制:256MB描写叙述 小Ho给自己定了一个雄伟的目标&#xff1a;连续100天每天坚持在hihoCoder上提交一个程序。100天过去了。小Ho查看自己的提交记录发现有N天由于贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi歧视的眼神…

libcurl上传文件

libcurl参数很多&#xff0c;一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题&#xff1a;libcurl断点下载>> 这里主要汇总一下&#xff0c;libcurl上传的二种方式&#xff1a; 1、直接上传文件&#xff0c;类似form表单<input type”file” />&#xff0c;…