五月二号java基础知识
1.使用Runnable接口可以轻松实现多个线程共享相同数据,只要用用一个可运行对象作为参数
创建多个线程就可以了
2.当一个线程对共享的数据进行操作时,应使之成为一个“原子操作”即在没有完成相关操作
之前,不允许其他线程打断他,否则就会破坏数据的完整性,必然会得到错误的处理结果
这就是线程的同步
3.被多个线程共享的数据在同一时刻只允许一个线程处于操作之中,这就是同步控制中的
“线程间互斥”问题
4.同步指的是处理数据的线程不能处理其他线程当前还没有处理结束的数据,
但可以处理其他的数据
5.在并发程序设计中,对多线程共享的资源或数据称为临界资源或同步资源
6.JAVA语言使用synchronize关键字来标识同步的资源,这里的资源可以是一种类型的数据,
也可以是对象,也可以是一种方法,还可以是一段代码。synchronized直译为同步,但实际
指的是互斥。
7.synchronized的用法如下:
格式一:同步语句
Sychronize(对象){
临界代码段}
其中,“对象”是多线程共同操作的公共变量。即需要锁定的临界资源,它将被互斥的使用
格式二:互斥方法
public synchronize 返回类型 方法名(){
方法体}
同步方法的等效方式如下:
public 返回类型 方法名(){
synchronized(this)
{
方法体}}
8.synchronize的功能是:首先判断对象或方法的互斥锁是否存在,若在就获得互斥锁,然后
可以执行紧随其后的临界代码段或方法体;如果对象或方法的互斥锁不在(已被其他线程拿走)
直到获得互斥锁
9.这些线程的synchronize代码块之间是串行执行的,不再是互相交替穿插并发执行的
10.synchronize代码块中的代码数量越少越好,包含的范围越小越好,否则就会失去多线程
并发执行的好多优势
11.若两个或多个线程锁定的不是同一个对象,则它们的synchronize代码块可以相互交替穿插
并执行
12.所有的非synchronize代码块或方法,都可自由调用。如线程A获得了对象的互斥锁,调用
对象的synchronize代码块,其他线程依然可以自有调用该对象的所有非synchronize方法或
代码
13.任何时刻一个代码的互斥锁只能被一个线程所拥有
14.只有当一个线程执行完它所调用对象的所有synchronize代码块或方法时,该线程会释放
这个对象的互斥锁
15.临界代码中的共享变量应定义为private型。否则,其他类的方法可能直接访问和操作该
共享变量,这样synchronize的保护就失去了意义
16.只能用临界代码段中的方法访问共享变量。故锁定的对象通常识this,即通用格式是:
synchronize(this){...}
17.一定要保证,所有对临界代码中共享变量的访问与操作均在synchronize代码块中执行
18.对于一个static型的方法,即类方法,那么整个方法时synchronize,要么整个方法不是
synchronized
19.如果synchronize用在类声明中,则表示类中的所有方法都是synchronize的
20.线程之间的通信
注意:对于一个线程,若基于对象x调用了wait()、notify()方法、notifyAll()方法,
该线程必须已经获得对象x的互斥锁。换句话说,wait()、notify()、notifyAll()只能在同步
代码块里调用
总结:今天学习了同步以及并发的执行,对同步之间控制的关键字synchronize有了深刻的了解
它可以做用在变量上面也可以作用在方法上面来控制多线程共享同一个资源
五月二号java基础知识的更多相关文章
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 生活点滴:java基础知识细化
生活点滴:java基础知识细化 一.前言 越是对一门语言深入了解,就会发现自己不知道的东西越多,这才是走向了正道,同样的,对于java语言特性的学习,笔者也只是初窥门径. 二.java基础知识思考 i ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- Java 基础知识总结1
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- java基础知识小小结
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- WebStorm 2021.3 的永久激活教程
关注公众号回复 webstorm 即可获取激活脚本和教程 更新时间 2022年9月2日. 不定时更新 激活码可在公众号中回复[激活码]获取.
- org.nutz.http.Http忽略https SSL证书验证
访问的是一个https get请求,报错需要SSL证书验证,以下方法直接跳过 boolean check = Http.disableJvmHttpsCheck(); // 忽略https的证书检查
- drf视图类
1 2个视图基类 # django 内置的View# drf 的APIView ,继承自View# GenericAPIView -两个重要的类属性: queryset = Book.objec ...
- Android 自定义View (二)
一.前言 上节 通过一个简单的旋转环对自定义view作了一个基本的认识,本文将大致讲解下实现的思路以及对该view的一些可能的改进. 二.思路 主要通过重写 view 中的 onDraw() 方法,利 ...
- 【组会】2023_1_27 google soli
Soli: Ubiquitous Gesture Sensing with Millimeter Wave Radar (59) soli是一项运用微型雷达监测空中手势动作的传感技术,这种特殊设计的雷 ...
- 在为 DataGridView 添加数据列时,弹出 将要添加的列 CellType 属性为空 错误提示与说明
事务:为 DataGridView 添加数据列[也可以说是直接操作 DataGridView 数据列...]... 原由:在为 DataGridView 添加列的时候,[至少这是第三次遇到] 弹出 添 ...
- .Net5.0 上传图片、文件到服务器
今天来看看.net上传图片到服务器的方式 public class ControlPresetUploadInput { /// <summary> /// 通道编号 /// </s ...
- Django数据迁移介绍
1.简介 迁移是 Django 将你对模型的修改(例如增加一个字段,删除一个模型)应用至数据库表结构对方式 2.基本命令 python manage.py migrate---负责应用和撤销迁移 py ...
- TypeError: list indices must be integers or slices, not str解决方法
print (response.json()['data']['patientId'])TypeError: list indices must be integers or slices, not ...
- markdown基本学习
MarkDown学习 标题(二级标题 ##) 标题 字体 加粗(**文字**) 斜体 (*文字*) 加粗+斜体 (***文字***) 废弃 (~~文字~~) 引用(>文字) 摘抄 分割线(--- ...