java-异步与并发之基础
1.线程提供了一个方法:
void join()该方法允许一个线程在另一个线程上等待,直到其完成工作后才解除阻塞运行。所以join可以协调线程之间同步运行线程调用join()方法,方法后就进入阻塞状态。
2. 同步与异步:
同步运行指代码运行是有先后顺序的执行
异步运行指代码与代码间是“各干各的”互不影响
多线程并发是异步运行代码的,但是有时候又需要这些线程间的同步运行时可以使用join完成线程间的同步。
3.当一个方法的局部内部类中想引用这个方法的其他局部变量,那么该局部变量必须是final的,这是由于jvm内存分配问题,java8以后没有这个问题
4.多线程并发安全问题由于线程之间运行的是异步的,互相没有牵制,如果同时访问统一资源时就会出现“抢”的现象,由于线程发生切换现象的实际不确定性导致代码执行顺序可能未按照设计的顺序执行,出现一系列的不可预知的错误。
5.当一个方法被synchronized修饰后,该方法称为同步方法,即:多个线程不会同时对beans这个数据进行操作没有抢的问题,就不会出现并发安全问题了
在一个方法上使用synchronized修饰,那么同步监视器对象是该方法所属对象,即方法内部看到的this。
6.有效的缩小同步范围可以在保证并发安全的前提下尽可能提高并发效率:
同步块可以更精确的指定需要同步的代码片段。若希望多个线程同步执行里面的代码,就需要在同步块中指定的“同步监视器(即:)上锁对象”
必须是同一个才可以。这里由于t1,t2调用的是同一个shop的buy方法,所以这里两个线程看到的this都是这个shop对象那么这个同步块就具有了同步效果。
7.静态方法使用synchronized修饰后,该方法一定具有同步效果:
静态方法上使用synchronized修饰后,同步监视器对象是当前类的类对象。jvm在加载每个类的时候,都会实例化一个且只实例化一个class的实力用来描述这个类,而静态方法锁的就是这个对象。
8. 互斥锁:synchronized修饰不同的代码,当同步监视器对象是相同的时候这些代码片段之间就是互斥的。多个线程不能同时进到这些代码片段中一起执行。
9.使用集合工具类java.util.Collections的相关静态方法可以将现有集合或Map转换为线程安全的
synchronizedList、synchronizedSet、synchronizedMap
哪怕是线程安全的集合也不与迭代器遍历该集合互斥,所以在开发时要自行维护互斥关系。
10.线程池:线程池主要解决两个问题:
1:控制线程数量:每条线程都需要占用一部分内存,线程数量越多占用内存资源越多,并且线程多了以后CPU轮询时间会变长形成CPU过度切换,这些都会导致系统变慢,甚至瘫痪。
2:重用线程:频繁创建销毁线程也会给线程调度带来负担。尽量重用线程。减小系统开销。
当一个正在阻塞的线程被中断时,会抛出中断异常InterruptedException
shutdown()和shutdownNow():前者调用完毕后线程池不在接受新任务并且会将池中剩余任务执行完毕后自行停止。后者调用后线程池会强制中断线程池中所有线程并立即停止线程池。
我是初学者,如有更新不好的,欢迎这位大神指出,谢谢大家!
更多精彩以后更新,转载注明!
java-异步与并发之基础的更多相关文章
- Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1
Paip.Php Java 异步编程.推模型与拉模型.响应式(Reactive)"编程FutureData总结... 1.1.1 异步调用的实现以及角色(:调用者 提货单) F ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java程序设计的DOS命令基础
Java程序设计的DOS命令基础 用户使用操作系统和软件有两种方式:命令行界面(Command Line Interface,CLI)和图形界面(Graphical User Interface,GU ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
- Java中实现异常处理的基础知识
Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...
- JAVA面试题集之基础知识
JAVA面试题集之基础知识 基础知识: 1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- async And await异步编程活用基础
原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 a ...
- Java IO 文件与流基础
Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...
随机推荐
- 关键路径 p3 清华复试上机题
关键路径 p3 清华复试上机题 题目描述 小H为了完成一篇论文,一共要完成n个实验.其中第i个实验需要a[i]的时问去完成.小H可以同时进行若干实验,但存在一些实验,只有当它的若干前置实验完成时,才能 ...
- Zookeeper分布式锁实现Curator十一问
前面我们剖析了Redisson的源码,主要分析了Redisson实现Redis分布式锁的15问,理清了Redisson是如何实现的分布式锁和一些其它的特性.这篇文章就来接着剖析Zookeeper分布式 ...
- 开发工具-Base64编码/解码
更新日志 2022年6月10日 新增链接. https://toolb.cn/base64
- react-router v6对比react-router v5
简述: 1. react-router v6 原生支持typeScript ; 安装方法 npm install react-router-dom@6 2. react-router v ...
- WTM框架使用技巧之:CI/CD(持续集成/持续部署)
1. 什么是WTM框架? 一个快速.灵活.社区活跃.最最最最高效的.netcore 后台管理系统.详见 https://wtmdoc.walkingtec.cn/ 欢迎大家付费支持WTMPlus,反哺 ...
- python之单元测试unittest
一.unittest主要内容 主要核心部分:test case, test suite, test runner, test fixture 二.实例 my_class.py文件如下: class F ...
- linux安装源码包指定安装目录
当下载完一个源码包并且解压后 文件夹下会有一个重要的文件configure configure 文件是一个可执行的脚本文件,它将检查目标系统的配置和可用功能,比如一些检查依赖或者启用禁用一些模块,它有 ...
- SAP BOM 笔记(本文仅作笔记使用,非原创)
SAP各种BOM汇总--含义解释(简洁易懂)-转载(原文连接:http://blog.sina.com.cn/s/blog_b9137f430102xpam.html)感谢作者分享 订单BOM ...
- rhel修改系统语言
修改系统语言的三种方式 1.yum install system-config-language //挂载本地源,然后安装 system-config-language 2. ...
- Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例
目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...