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. 一维码生成 c# winform GUI

    最近看到同事小红在做一维码,感觉挺好玩,于是就在网上找了一个例子来玩玩. 下面的代码均为网上的代码,做了一些整理,但是忘记了出处,原作者看到可以提醒我,谢谢. 首先,一维码的相关知识可以先百度一下:h ...

  2. 2016-08-01一起领略ReactJs的风采

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  3. SQL Server 2008 R2没有卸载干净

    在卸载Microsoft SQL Server 2008 R2 安装程序(简体中文) 出现 :“警告 26003.无法卸载 Microsoft SQL Server 2008 R2 安装程序支持文件, ...

  4. 安卓四大组件之activity和获取网络资源之断点续传

    Day05 数据存储及多线程断点续传1.数据提交到服务器两种方式的优缺点* GET请求优点:使用非常方便,只需要在url后面组拼数据.缺点:数据在url的后面组拼,不安全.有数据长度限制.* POST ...

  5. NGUI 屏幕自适应

    雨松MOMO 2014年05月04日 于 雨松MOMO程序研究院 发表  现在用unity做项目 90%都是用NGUI,并且我个人觉得NGUI应该算是比较成熟的UI插件,虽然他也存在很多问题,但是至少 ...

  6. (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得

    jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...

  7. Maven学习-目录结构

    在前一篇文章中,我们介绍了什么是Maven,以及如何用Maven来构建我们的项目.不了解Maven的童鞋,可以看这里Maven学习-入门.在这篇文章中,我们将学习Maven的项目的目录结构相关的内容. ...

  8. 一个Java内存可见性问题的分析

    如果熟悉Java并发编程的话,应该知道在多线程共享变量的情况下,存在“内存可见性问题”: 在一个线程中对某个变量进行赋值,然后在另外一个线程中读取该变量的值,读取到的可能仍然是以前的值: 这里并非说的 ...

  9. JSP-JSTL学习

    <%@page import="com.Student"%> <%@page import="com.Person"%> <%@p ...

  10. Apache 的ab测试

    <!-- 博主所有文章仅是作为自己的笔记 如有不足 请见谅--> Apache的ab测试  和  ab测试 不是一个东西(百度 ab测试可以了解) 网站性能压力测试是服务器网站性能调优过程 ...