五月二号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 程 ...
随机推荐
- java从键盘输入数据
一.从键盘输入字符串 1.nex和nextLine的区别 next()读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Enter键或Tab键等结束符,next()会自动将其去掉,只有在 ...
- Latex基础
文档类 latex提供的基础文档类 article report book proc slides minimal 特殊符号 空格 命令后边空格 1. 字母形式的latex命令忽略其后的所有连续空格, ...
- 项目:表格打印(字符图网格进阶、rjust、列表中最长的字符串长度)
项目要求:编写一个名为 printTable()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐. tableData = [['apples', 'oranges', 'ch ...
- vscode 一些扩展的推荐(前端)
- `Auto Rename Tag`:成对修改 HTML 标签名 - `Bracket Pair Colorizer`:括号匹配高亮 - `Color Highlight`:显示颜色代码的颜色 - ...
- Bootstrap4布局(简要)
目录 什么是Bootstrap 布局基础 布局容器 相应断点 z-index 网格系统 12栅格 重排序 列偏移 弹性盒子 什么是Bootstrap Bootstrap是目前最流行的一套前端开发框架, ...
- C# winform DataGridView 一列显示星号
private void myDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventA ...
- Eclipse导入第四版《算法》algs4库
最近在研究<算法>,遇到algs4库导入eclipse问题,查了很多网站,都不适用,最终解决,特此记录一下.第一次写博客,有什么不足之处望各位大神纠正. 1. 首先打开eclipse软件, ...
- 西电oj 244题单词排序
题目描述: 定义一个二维字符数组str[10][20],行号表示单词序号,列号表示单词最大长度, 输入一个正整数N(N≤10),表示单词数,使用函数wd_sort()完成单词的排序,按字母顺序从小到大 ...
- redis windows版本安装
1.redis3.0-win版本微软已停止更新 链接:https://github.com/microsoftarchive/redis 非官方在持续更新 链接:https://github.com/ ...
- base64压缩
1 /** * 压缩图片 * base64 : 图片base64字符串 * w : 图片宽高最大值 * callback : 回调函数 * quality : 压缩系数0-1之间, 默认0.92 * ...