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 ... 
随机推荐
- 应用间共享数据方法(一)---sharepreferce
			SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ... 
- PHP  单引号 与双引号区别
			在PHP中,字符串的定义可以使用单引号,也可以使用双引号. PHP允许我们在双引号串中直接包含字串变量,双引号串中的变量将被解释而且替换,而单引号串中的内容总被认为是普通字符.例如: $foo = 2 ... 
- foreach循环 Java
			第一次遇到foreach循环,是在PHP的数组中,同样,在Java数组中,也遇到了foreach循环,都是用来遍历数组(集合).遍历数组,首先想到的一般都是用while,do while,for循环, ... 
- oracle 行转列、列转行
			最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle 列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ... 
- software_testing_work3_question2
			package com.Phantom; import java.rmi.server.Operation; import java.util.Scanner; public class Work3_ ... 
- .htaccess详解及.htaccess参数说明【转】
			目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ... 
- 一个assert的写法
			]; int assert_buf_len; #ifdef XXX_DEBUG #define assert(expr, ...) \ do{ \ if ((!(expr))) \ {\ char * ... 
- MYSQL数据库导入数据时出现乱码的解决办法
			我的一个网站在负载搞不定的情况下最终选择了数据库和程序分离的方式解决的高负载,但是再导入数据的时候出现了大量乱码,最终通过方法二解决掉导入数据的问题,后面再设计网站布局的时候数据库跟网站程序分离是个很 ... 
- MFC中输入框的文本转换为char[]字符数组类型
			在MFC的输入框中得到输入字符串用如下形式: CString v_inputstring; (( CEdit *) GetDlgItem (IDC_EDIT1 ))-> GetWindowTex ... 
- (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)
			在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ... 
