五月二号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 程 ...
随机推荐
- c#控制台使用WebBrowser获取html问题
在主线程上打上 [STAThread]标记就行 在main()最后一句 添加Application.Run(); 就能使控制台像窗体一样持久运行而不是阻塞啥也不干 [STAThread]stati ...
- LeetCode 之 559. N叉树的最大深度
原题链接 思路: 递归计算每个子树的深度,返回最大深度即可 python/python3: class Solution(object): def maxDepth(self, root): &quo ...
- 关于ADB命令工具
android提供了不少命令行工具,方便我们调试和查看信息.下面是frameworks/base/cmds(android 6.0.1)中的命令. $ tree cmds -L 1 cmds am├─ ...
- vue echarts 多个图表自适应
<template> <div :id="id" :style="{width: `${width}`, height: `${height}`}&qu ...
- 如何用算法把一个十进制数转为十六进制数-C语言基础
这一篇文章要探讨的是"如何用算法实现十进制转十六进制"并不涉及什么特别的知识点.属于C语言基础篇. 在翻找素材的时候,发现一篇以前写的挺有意思的代码,这篇代码里面涉及的知识点没有什 ...
- centos7中Firefox安装Flash插件
第一步:先下载好Flash插件安装包,可以到Adobe官网下载.因为是linux 64位系统,所以要下个匹配的,我下载的是flash_player_npapi_linux.x86_64.tar.gz, ...
- Angular架构学习
定义 Angular 是一个用 HTML 和 JavaScript 或者一个可以编译成 JavaScript 的语言(例如 Dart 或者 TypeScript ),来构建客户端应用的框架. 写 An ...
- C# Nilakantha级数逼近PI算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- JavaScript数组常用的方法总结
数组常用方法 concat() 方法 concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var arr = new Array(3) arr ...
- Python学习笔记W1
今天正式开始学习Python语言,学习方式观看教学视频,完成作业.视频共计28周,争取每天2天完成一周教学内容,共计56天,预计完成日期:2019-2-28. Owen写于2018-12-22 ...