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类的构造器时,仅仅是在 ...
随机推荐
- React BrowserHistory 踩坑实录 布置到服务器Nginx上各种静态文件、二级地址404
由于BrowserHistory访问的是文件真实地址不仅需要前端配置package.json还需要运维端配置一下网站Nginx设置环境: "react": "^17.0. ...
- Spring bean到底是如何创建的?(上)
前言 众所周知,spring对于java程序员来说是一个及其重要的后端框架,几乎所有的公司都会使用的框架,而且深受广大面试官的青睐.所以本文就以常见的一个面试题"spring bean的生命 ...
- 在.NET中计算文件的MD5值
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...
- DAST 黑盒漏洞扫描器 第三篇:无害化
0X01 前言 甲方扫描器其中一个很重要的功能重点,就是无害化,目的是尽量降低业务影响到可接受程度. 做过甲方扫描器,基本上对于反馈都有所熟悉. "我们的服务有大量报错,请问和你们有关么&q ...
- 23.Nginx+keepalived负载均衡高可用
Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...
- UiPath鼠标操作文本的介绍和使用
一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对文本的操作在UiPath中的使 ...
- 用Python做了个图片识别系统(附源码)
本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下PIL: PIL(Python Image Library)是一种免费的图像 ...
- Linux修改默认ssh22端口
1.检查端口是否可用 使用下面的命令检查您想增加或修改的端口号是否被占用,执行命令后如果没有任何打印,说明这个端口没有被占用 netstat -lnp|grep 23456 2.修改配置文件 ssh配 ...
- .Net下极限生产力之efcore分表分库全自动化迁移CodeFirst
.Net下极限生产力之分表分库全自动化Migrations Code-First ## 介绍 本文ShardinfCore版本x.6.x.x+ 本期主角: - [`ShardingCore`](htt ...
- dolphinscheduler添加hana支持
dolphinscheduler添加hana支持 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/16395092.html 前面 上一节有讲datax对han ...