五月二号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 程 ...
随机推荐
- redis 简单安装
参考官网,安装步骤基本照搬redis官网,其他只做简单说明https://redis.io/download/https://redis.io/docs/getting-started/install ...
- Linux系列(8)-添加用户并设置密码
#添加用户[root@iZm5ehnt0e8indgne1hibuZ ~]# useradd -m linsiyu #设置用户密码[root@iZm5ehnt0e8indgne1hibuZ ~]# p ...
- 【Unity】使用dmp文件定位Player崩溃原因
写在前面 如果在Player运行时突然崩溃,仅靠Player.log日志文件不能定位引起崩溃的代码,那么可以尝试利用dmp(仅限Windows平台)文件定位崩溃原因. 正文 环境 Unity 2020 ...
- 汇编程序 - TD调试
为了写这个Blog,无奈的我深夜打开虚拟机,希望也能帮助一些人,因为好像真的有人不会欸!(→_→) 写在前面的话: 1. TD面板下的调试十分重要.可以观察内存(GOTO DS:XXXX)存放的位置与 ...
- weblogic session timed out
How to Configure Session Timeout in Weblogic Server (WLS) ?
- 转载:谷歌浏览器一些https打不开点击高级不行的解决办法
转载:https://blog.51cto.com/u_15275035/2925642 关于谷歌浏览器一些https网站打不开点击高级不行的解决办法有些url,在谷歌浏览器上打不开,点击高级也没有继 ...
- postgres 表字段修改
更换字段名 alter table 表名 rename column 字段名 to 新字段名; 更换表名 alter table 表名 rename to 新表名; 更改字段长度 alter tabl ...
- excel编辑受限的密码保护破解
录制一个宏并且执行: Public Sub 工作表保护密码() Const DBLSPACE As String = vbNewLine & vbNewLine Const AUTHORS A ...
- Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number
IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>( ...
- 实验1.SDN拓扑实践
实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...