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的更多相关文章

  1. Java关键字synchronized详解

    Java多线程thread互联网制造  synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话 ...

  2. 理解java关键字Synchronized(学习笔记)

    之前学习了线程的一些相关知识,今天系统的总结下来 目录 1. Java对象在堆内存中的存储结构 2. Monitor管程 3. synchronized锁的状态变换以及优化 4. synchroniz ...

  3. [JAVA关键字] synchronized

    synchronized, Example: public synchronized void XXX() {} 参考 http://wenku.baidu.com/link?url=ecb1Zivf ...

  4. java关键字synchronized

    1.对于synchronized方法和synchronized块,一个线程访问时,其他线程可以访问此类的非synchronized方法或块,不能访问其他带synchronized的方法或块. 举例如下 ...

  5. Java 多线程 —— synchronized关键字

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  6. Java的synchronized关键字:同步机制总结

    JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程 ...

  7. Java Concurrency - synchronized 关键字

    当有多个线程竞争共享资源时,对资源的访问顺序敏感,则可能造成数据不一致.为了保证共享资源不被多个线程同时访问,则需要将竞争共享资源的代码置于临界区,临界区保证在同一时间内最多只能有一个线程执行该代码段 ...

  8. java中synchronized关键字分析

    今天我们来分析一下java中synchronized关键字.首先来看一段java代码:(本地编译环境为mac,jdk1.8的环境) Demo.java package com.example.spri ...

  9. Java基础-synchronized关键字的用法(转载)

    synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...

  10. Java并发-Synchronized关键字

    一.多线程下的i++操作的并发问题 package passtra; public class SynchronizedDemo implements Runnable{ private static ...

随机推荐

  1. sphinx,coreseek安装

    sphinx是国外的一款搜索软件. coreseek是在sphinx的基础上,增加了中文分词功能,换句话说,就是支持了中文. Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本 ...

  2. 好久没写Blog了

    上一年的经历: <炸年兽>搞了一阵后,美术去创业了.. 和另一个美术断断续续,做了个<斗战圣佛>,挺山寨的,都没敢跟别人说. 不管怎么说也算是自己上了一个appStore的游戏 ...

  3. 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)

    1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...

  4. CDH5X 安装oozie报错To enable Oozie web console install the Ext JS library.

    最近在CDH5.X 安装oozie 服务,服务安装完毕,访问oozie server ui,报如下错误: 页面提示: Oozie web console is disabled.To enable O ...

  5. Maven指令

    mvn clean compile  //clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码. mvn clean test  //清理输出目录target ...

  6. Adobe Audition音频制作

    Adobe Audition 同义词 AU(软件(Adobe Audition))一般指Adobe Audition Adobe Audition是一个专业音频编辑和混合环境,原名为Cool Edit ...

  7. 什么是 JSON ?

    什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 JSON ...

  8. forEach遍历数组实例

    forEach()取出数组中2的倍数和3的倍数的数 //for IE if(!Array.prototype.forEach){ Array.prototype.forEach = function( ...

  9. bash 取文件特定行

    比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!

  10. 二叉树[C实现]

    #include<stdio.h> #include<malloc.h> #include<iostream> //定义节点 typedef struct BiNo ...