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基础知识的更多相关文章

  1. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  2. 生活点滴:java基础知识细化

    生活点滴:java基础知识细化 一.前言 越是对一门语言深入了解,就会发现自己不知道的东西越多,这才是走向了正道,同样的,对于java语言特性的学习,笔者也只是初窥门径. 二.java基础知识思考 i ...

  3. java基础知识一览(二)

    一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...

  4. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  5. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  6. Java 基础知识总结

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

  7. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  8. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  9. Java 基础知识总结1

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

  10. java基础知识小小结

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. Git本地仓库的文件夹不显示红色感叹号、绿色对号等图标

    参考 https://blog.csdn.net/Elon15/article/details/125898375 主要是  在文件名前加8个空格(最少8个)!!!!

  2. JAVA 、Http协议:

    JAVA如何配置服务器: Http协议: 1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的   一种网络协议.所有的W ...

  3. webstrom破解

    1.下载webstrom补丁 链接:https://pan.baidu.com/s/1I93J_JOlbZzkoqV4EsJlpQ       提取码:kopn       (永久有效) 2.将补丁复 ...

  4. python中将各种类型表达式中的 \ 符号,都看作转义符

    python中将各种类型表达式中的 \ 符号,都看作转义符,如 \n 代表换行  \t  代表空tab,还发现 \a 相当于什么都不是,改行末尾的 \ 的意思是该行还没写完,接着下边一行的内容. 转义 ...

  5. intellij idea修改背景图片

    上方菜单栏选择 File -> settings -> plugins,搜索Backgroung Image Plus插件 下载之后restart 菜单栏上选择view   设置好后选择O ...

  6. 记一次Centos7上安装VNC服务

    需要部署oracle数据库,操作系统为Centos7.5,oracle数据库在linux上面部署必须要安装一些依赖包,安装好,当然可以通过静默化安装,时间紧任务重,就通过vnc服务来进行安装,桌面化操 ...

  7. Vue的官方脚手架 Vue-cli 安装使用解析

    ------------恢复内容开始------------ 1.首先什么是vue-cli 可以知道Vue-cli是一个官方提供的脚手架,主要作用是用来快速搭建Vue的项目模板,可以预先定义好项目的结 ...

  8. vue3 ThreeJS 引入obj模型过暗的问题

    当我单纯地用MTLLoader引入材质, OBJLoader引入模型并添加到场景中时, 发现模型非常得暗. 需要将环境光的强度设置到3.5左右看起来才比较正常. 但正常情况下环境光的值不应该超出1.  ...

  9. 2---JVM启动参数有哪些?

    也要以说JVM启动的时候可以调整哪些参数,来进行调优.JVM 为垃圾收集器.堆大小和运行时编译器提供与平台相关的默认选择. 性能取决于堆的大小.应用程序维护的实时数据量以及可用处理器的数量和速度.. ...

  10. 老系统的奇葩问题-tomcat7启动失败

    好多年的tomcat7系统了  当时部署安装为了服务 直接启动 就这么简单 好多年没动过了 这次修改了些东西 需要重启 却报错了... 解决: 把服务删除  使用bat启动  成功. 原因:可能是多个 ...