- 浏览: 88813 次
最新评论
-
ngn9999:
天下文章一大抄
网页上的FLASH挡住层 -
avi2:
绿色软件直接可以用的
最好的java反编译器 -
无敌小蚂蚁:
http://java.decompiler.free.fr/ ...
最好的java反编译器 -
无敌小蚂蚁:
怎么用?好像不好使!!
最好的java反编译器 -
avi2:
你是不是make少库了?
RSYNC安装使用详解
synchronized 的语法:
synchronized 可以作为一个method的修饰符,也可以一段代码里出现,先说在代码里出:
其语法是
这个xx需要是一个Object,只要是一个Object就行,如:
不是Object不行,如:
是不可以的,有autoboxing也不行。
如果你理解this的含义,那么
也很好理解,它需要一个Object,而this是一个特殊的Object,当然可以这样用。
再说synchronized 修饰 method的情况,如果synchronized修饰一个非static的method,
如:
相当于:
修饰一个 static的method,
如:
相当于:
XX是这个方法所在的类,XX.class 也是一个Object,类型是Class而已,在一个
ClassLoader里,它是唯一的,就是独一无二的object
总之synchronized的语法可以统一为: synchronized(a var) { do something }
synchronized 的语义:
这是我自己的理解,
synchronized(xx) {
//your code
}
的语义是,在xx这个Object的“授权”、“名义”、 “面子”下,执行 your code。要注
意的是,xx只能授权给一个人(线程),当xx授权给某个人执行后,就不能再授权给别人了
。 当那个人执行完那段代码后,xx才能继续授权给其它人执行,可以理解为,别人在xx的
授权下,执行完这段代码后,把这个权利又还给xx了。 当xx不能授权给一个人时,这个人
必须等在这里,知道xx可以授权给它。 (上面说的人都是线程)
synchronized 的作用:
synchronized是用在多线程环境中的,作用简单的说,就是不允许 “某些” 线程 同时执
行到一段代码里。 这个 “某些”线程 怎么界定? 是由那个xx object决定的,就是当两
个线程执行到 synchronized的时候,需要同一个Object授权时,这两个线程不能同时执行
到需要授权的代码。
极端情况是 系统你所有的线程都不能执行到这段代码里,那么你就选一个极端唯一的
object作为xx,一般选Class object,如:
synchronized(String.class) {
}
具体到应用比较复杂,举两个例子:
1:
2:
两个例子中,都有一段synchronized的代码。
在1中,main方法中创建的10个线程 不能同时进入到那段代码执行,因为这10个线程需要让
同一个object授权
而
在2中,main方法中创建的10个线程 可以同时进入到那段代码执行,因为10个线程是让不同
的object授权的,均授权成功,同时进入到那段代码执行
synchronized 可以作为一个method的修饰符,也可以一段代码里出现,先说在代码里出:
其语法是
synchronized(xx) { //your code }
这个xx需要是一个Object,只要是一个Object就行,如:
String s="haha"; synchronized(s) { //your code }
不是Object不行,如:
int n=3; synchronized(n) { //your code }
是不可以的,有autoboxing也不行。
如果你理解this的含义,那么
synchronized(this) { //your code }
也很好理解,它需要一个Object,而this是一个特殊的Object,当然可以这样用。
再说synchronized 修饰 method的情况,如果synchronized修饰一个非static的method,
如:
public synchronized void aMethod() { //some code }
相当于:
public void aMethod() { synchronized(this) { //some code } }
修饰一个 static的method,
如:
public static synchronized void aMethod() { //some code }
相当于:
public static synchronized void aMethod() { synchronized(XX.class) { //some code } }
XX是这个方法所在的类,XX.class 也是一个Object,类型是Class而已,在一个
ClassLoader里,它是唯一的,就是独一无二的object
总之synchronized的语法可以统一为: synchronized(a var) { do something }
synchronized 的语义:
这是我自己的理解,
synchronized(xx) {
//your code
}
的语义是,在xx这个Object的“授权”、“名义”、 “面子”下,执行 your code。要注
意的是,xx只能授权给一个人(线程),当xx授权给某个人执行后,就不能再授权给别人了
。 当那个人执行完那段代码后,xx才能继续授权给其它人执行,可以理解为,别人在xx的
授权下,执行完这段代码后,把这个权利又还给xx了。 当xx不能授权给一个人时,这个人
必须等在这里,知道xx可以授权给它。 (上面说的人都是线程)
synchronized 的作用:
synchronized是用在多线程环境中的,作用简单的说,就是不允许 “某些” 线程 同时执
行到一段代码里。 这个 “某些”线程 怎么界定? 是由那个xx object决定的,就是当两
个线程执行到 synchronized的时候,需要同一个Object授权时,这两个线程不能同时执行
到需要授权的代码。
极端情况是 系统你所有的线程都不能执行到这段代码里,那么你就选一个极端唯一的
object作为xx,一般选Class object,如:
synchronized(String.class) {
}
具体到应用比较复杂,举两个例子:
1:
public class Test1 implements Runnable { public void run() { synchronized(this) { try { System.out.println(System.currentTimeMillis()); Thread.sleep(2000); System.out.println(System.currentTimeMillis()); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { Test1 test=new Test1(); for(int i=0;i<10;i++) { new Thread(test).start(); } } }
2:
public class Test1 implements Runnable { public void run() { synchronized(this) { try { System.out.println(System.currentTimeMillis()); Thread.sleep(2000); System.out.println(System.currentTimeMillis()); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { for(int i=0;i<10;i++) { new Thread(new Test1()).start(); } } }
两个例子中,都有一段synchronized的代码。
在1中,main方法中创建的10个线程 不能同时进入到那段代码执行,因为这10个线程需要让
同一个object授权
而
在2中,main方法中创建的10个线程 可以同时进入到那段代码执行,因为10个线程是让不同
的object授权的,均授权成功,同时进入到那段代码执行
发表评论
-
my idea on test
2012-02-06 23:25 0my idea on test -
12312312312312123123
2010-09-28 10:45 0dddddadfasdfsdfasdf -
JRebel3.0
2010-08-22 11:51 0是用eclipse开发java的时候,经常在修改java类文件 ... -
如何使arraylist 线程安全?
2010-08-09 11:23 1188List list = Collections.synch ... -
poi 控制单元格的string属性
2010-08-05 19:25 1443开发中碰到一个很怪的问题,设置单元格的属性是string了,显 ... -
给类的所有属性赋值
2010-08-03 11:36 1613ContractBo contractBo = new C ... -
Jetty in GWT-DEV Form too large
2010-07-30 14:34 1147java.lang.IllegalStateException ... -
war包中配置文件读取
2010-05-19 13:58 2830尽可能使用 getServletContext().getRe ... -
[转]org.hibernate.hql.ast.HqlToken 错误weblogic异常
2010-05-11 15:57 1354在运行过程中出现 ClassNotFoundException ... -
html转pdf的开源项目
2010-05-08 22:17 1328一个是xhtmlrenderer https://xhtmlr ... -
weblogic with spring hibernate mappingDirectoryLocations error
2010-05-04 14:25 3320_wls_cls_gen.jar Issue from ht ... -
Unknown Faceted Project Problem in ecipse
2010-05-04 12:58 3543When I imported an existing Ecl ... -
一篇不错的介绍spring security 入门的文章
2010-05-01 22:01 881http://www.blogjava.net/fastzch ... -
Dynamic list binding in Spring MVC
2010-04-27 17:13 1181The Spring MVC documentation ju ... -
hibernate view 映射取空数据的问题
2010-04-13 09:48 784由于视图没有主键,所以hibernate映射联合组件,但是联合 ... -
spring mvc json学习
2010-04-11 21:13 3876首选 http://spring-json.sourcefor ... -
最好的java反编译器
2010-04-11 16:59 1859http://java.decompiler.free.fr ... -
jfreechat 一些杂记
2010-01-25 10:45 1412最近做个项目要用到jFre ... -
【转帖】JFreechar 乱码
2010-01-22 13:46 832CategoryAxis domainAxis = cat ... -
如何去除JInternalFrame的标题栏
2010-01-18 13:42 3272如何去除JInternalFrame的标题栏 yofly ...
相关推荐
java中synchronized用法
java里面synchronized用法
java同步synchronized关键字用法示例
java多线程编程核心技术synchronized实例大全,同步方法,同步语句块,类锁,对象锁全都用代码来展现出来
本篇文章主要介绍了java synchronized用法详解,synchronized是Java中的关键字,是一种同步锁。有兴趣的同学可以了解一下。
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
synchronized关键字在java中的重要性 以及常用的方法 还有它的详解
synchronized下的方法控制多线程程序中的线程同步非常方便,这里就来看一下Java使用synchronized修饰方法来同步线程的实例演示,需要的朋友可以参考下
主要介绍了Java中syncronized正确使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
一个多线程访问的同一个资源,java synchronized互斥锁的用法,android和此用法一致。
synchronized同步锁(悲观锁)2.1 synchronized 作用范围2.2 synchronized 核心组件2.3 synchronized 实现 1. Java锁的种类 1.1 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低。 每次去拿...
Synchronized关键字的用法
文章中详细描述了synchronize的使用方法,以及多线程的一些基本使用,纯手打。
synchronized关键字我们大家都知道是线程同步关键字.总结一下日常的使用方法,还有一个坑.
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
主要介绍了Java中synchronized关键字的用法,针对synchronized修饰方法的使用作出了简单讲解和演示,需要的朋友可以参考下
主要介绍了Java使用synchronized实现互斥锁功能,结合实例形式分析了Java使用synchronized互斥锁功能简单实现方法与操作技巧,需要的朋友可以参考下
下面小编就为大家带来一篇解决Maven 项目报错 java.httpservlet和synchronized使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文将接着讲一下Java线程同步中的一个重要的概念synchronized. synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大...