java关键字:synchronized
JAVA 如何共享资源
关于synchronized函数:
java具有内置机制,可防止某种资源(此处指的是对象的内存内容)冲突。由于你通常会将某class的数据元素声明为private,并且只经由其函数来访问其内存内容,所以你可以将某个函数声明为synchronized(同步化)以防止冲突的发生(不过线程可以唤起一个以上的对象的synchronized函数),下面便是synchronized函数的形式:
synchronized void f{ /*...*/ }
synchronized void g{ /*...*/ }
每个对象都含有一个机锁(lock,也称为monitor),它是对象与生俱来有的一部分(无需撰写特定程序代码即可拥有)。当你调用任何synchronized函数时,对象便被锁定,该对象的所有synchronized函数便无法再被调用,直到第一个函数执行完毕并解除锁定为止。上例中,如果某个对象的f()被调用了,该对象的g()便无法再被调用,知道f()执行完毕并解除锁定为止。同一个对象的所有synchronized函数共用一个机锁,而此机锁可防止一个以上的函数同时对同一块内存进行涂写操作。
每个class也有一个独立机锁(是class所对应的Class对象的一部分)。所以,synchronized static 函数可以在“影响基于整个class”的情况下进行锁定,避免static数据被同事访问。
请注意,如果你想要保护其他资源不被多个线程同时访问,你可以强迫自己通过synchronized函数访问该资源。
==========================我是分割线================================
关于synchronized块 :
synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机
制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:
synchronized (syncObject) {
//允许访问控制的代码
}
java关键字:synchronized的更多相关文章
- Java关键字synchronized详解
Java多线程thread互联网制造 synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话 ...
- 理解java关键字Synchronized(学习笔记)
之前学习了线程的一些相关知识,今天系统的总结下来 目录 1. Java对象在堆内存中的存储结构 2. Monitor管程 3. synchronized锁的状态变换以及优化 4. synchroniz ...
- [JAVA关键字] synchronized
synchronized, Example: public synchronized void XXX() {} 参考 http://wenku.baidu.com/link?url=ecb1Zivf ...
- java关键字synchronized
1.对于synchronized方法和synchronized块,一个线程访问时,其他线程可以访问此类的非synchronized方法或块,不能访问其他带synchronized的方法或块. 举例如下 ...
- Java 多线程 —— synchronized关键字
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java的synchronized关键字:同步机制总结
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程 ...
- Java Concurrency - synchronized 关键字
当有多个线程竞争共享资源时,对资源的访问顺序敏感,则可能造成数据不一致.为了保证共享资源不被多个线程同时访问,则需要将竞争共享资源的代码置于临界区,临界区保证在同一时间内最多只能有一个线程执行该代码段 ...
- java中synchronized关键字分析
今天我们来分析一下java中synchronized关键字.首先来看一段java代码:(本地编译环境为mac,jdk1.8的环境) Demo.java package com.example.spri ...
- Java基础-synchronized关键字的用法(转载)
synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...
- Java并发-Synchronized关键字
一.多线程下的i++操作的并发问题 package passtra; public class SynchronizedDemo implements Runnable{ private static ...
随机推荐
- String类常用方法小节
(1)String.equals() 返回值是boolean类型 equals(Object anObject) 将此字符串与指定的对象比较. (2)length() 返回值是in ...
- [转载]盒模型display:-webkit-box;的使用
http://blog.sina.com.cn/s/blog_62161a4d01019b7g.html box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的 ...
- 转载——C++控制台贪吃蛇代码
游戏截图: 以下是3个代码文件: Snake_Class.h文件: 1 #ifndef SNAKE 2 #define SNAKE 3 4 #include<windows.h> 5 #i ...
- Windows7+VS2010下OpenGL的环境配置
http://johnhany.net/2014/01/environment-for-opengl-with-vs2010/ OpenGL(Open Graphics Library)是一个开放的. ...
- mantis邮箱配置
1.修改/var/www/html/mantisbt-1.3.3/config下config_inc.php配置文件 以163邮箱为例 # --- Email Configuration --- $g ...
- PHP面向对象实例(图形计算器)
效果:
- Android Studio项目目录结构介绍——android菜鸟成长之路
在Android Studio中,提供了以下几种项目结构类型 我们一般常用的有以下两种结构: Project 结构类型 app/build/ app模块build编译输出的目录 app/build.g ...
- 第六周——分析Linux内核创建一个新进程的过程
"万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...
- case的执行顺序 & 嵌套使用
我们先来看一下表中数据的情况: select * from PRODUCTINFO PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPE ...
- ionic中的service简单写法
在service中写服务 服务名叫feedService .service('feedService',function($ionicLoading,$q,$http){ return{ //获取反馈 ...