- 浏览: 90364 次
最新评论
-
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 1214List list = Collections.synch ... -
poi 控制单元格的string属性
2010-08-05 19:25 1478开发中碰到一个很怪的问题,设置单元格的属性是string了,显 ... -
给类的所有属性赋值
2010-08-03 11:36 1659ContractBo contractBo = new C ... -
Jetty in GWT-DEV Form too large
2010-07-30 14:34 1179java.lang.IllegalStateException ... -
war包中配置文件读取
2010-05-19 13:58 2874尽可能使用 getServletContext().getRe ... -
[转]org.hibernate.hql.ast.HqlToken 错误weblogic异常
2010-05-11 15:57 1387在运行过程中出现 ClassNotFoundException ... -
html转pdf的开源项目
2010-05-08 22:17 1365一个是xhtmlrenderer https://xhtmlr ... -
weblogic with spring hibernate mappingDirectoryLocations error
2010-05-04 14:25 3369_wls_cls_gen.jar Issue from ht ... -
Unknown Faceted Project Problem in ecipse
2010-05-04 12:58 3580When I imported an existing Ecl ... -
一篇不错的介绍spring security 入门的文章
2010-05-01 22:01 910http://www.blogjava.net/fastzch ... -
Dynamic list binding in Spring MVC
2010-04-27 17:13 1210The Spring MVC documentation ju ... -
hibernate view 映射取空数据的问题
2010-04-13 09:48 810由于视图没有主键,所以hibernate映射联合组件,但是联合 ... -
spring mvc json学习
2010-04-11 21:13 3904首选 http://spring-json.sourcefor ... -
最好的java反编译器
2010-04-11 16:59 1882http://java.decompiler.free.fr ... -
jfreechat 一些杂记
2010-01-25 10:45 1445最近做个项目要用到jFre ... -
【转帖】JFreechar 乱码
2010-01-22 13:46 861CategoryAxis domainAxis = cat ... -
如何去除JInternalFrame的标题栏
2010-01-18 13:42 3307如何去除JInternalFrame的标题栏 yofly ...
相关推荐
"Java 中 synchronized 用法详解" Synchronized 是 Java 语言中用于解决多线程共享数据同步问题的关键字。它可以作为函数的修饰符,也可以作为函数内的语句,用于实现同步方法和同步语句块。在 Java 中,...
Java 中的 synchronized 用法详解 Java 中的 synchronized 关键字是用于解决多线程并发问题的重要工具之一。它可以被用于方法、代码块和变量上,以实现对共享资源的互斥访问控制。本文将对 Java 中的 synchronized ...
- **代码块同步:** 也可以使用`synchronized`关键字来同步代码块,这样可以更细粒度地控制同步范围,提高程序性能。 ```java public void method() { synchronized (object) { // 代码块 } } ``` 这里的`object...
在`Synchronized`压缩包中,可能包含了通过实验来演示`synchronized`关键字使用的一些Java代码。例如,创建一个共享资源类,然后通过多个线程去操作这个资源,使用`synchronized`关键字来保证线程安全。实验可能涉及...
本示例"java synchronized demo"旨在探讨`synchronized`关键字的用法及其作用机制。下面将详细阐述`synchronized`的相关知识点。 1. **synchronized的作用**: - `synchronized`关键字主要用于解决多线程环境中的...
"Java 锁机制 Synchronized" Java 锁机制 Synchronized 是 Java 语言中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。 Java 锁机制 Synchronized 的概念 在 Java 中,每个对象都可以被...
Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个线程对共享资源的访问冲突。在Java中,由于线程共享内存空间,如果没有适当的同步机制,可能会导致数据不一致...
本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...
`synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`synchronized`代码块或方法时,其他线程对这个对象的`synchronized`代码块或方法的访问将会被阻塞,直到当前线程执行完毕并释放...
1. **对象锁**:每个Java对象都可以作为一个锁,当调用对象的`synchronized`方法或在代码块中使用`synchronized`关键字时,会获取到这个对象的锁。如果多个线程尝试访问同一个对象的同步代码,只有一个线程能够获得...
Java 中 synchronized 正确使用方法解析 Java 中 synchronized 关键字是解决线程安全问题的重要手段,它可以确保在多线程环境下,共享资源的访问安全性。本文将详细介绍 Java 中 synchronized 的正确使用方法,通过...
`synchronized`关键字有两种主要的使用方式:一种是在方法声明中使用,另一种则是在代码块中使用。 ##### 1. synchronized方法 在方法声明中添加`synchronized`关键字,可以将整个方法体变成同步代码块。例如: `...
"基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。
通过在方法或代码块上使用`synchronized`,可以确保同一时间只有一个线程能访问这些代码区域,从而有效避免了多线程环境下的数据竞争和不一致性问题。 #### 二、synchronized的作用机制 `synchronized`主要通过对象...
理解 `synchronized` 的工作原理和用法对于编写线程安全的 Java 代码至关重要。然而,过度使用 `synchronized` 可能会导致性能下降,因为它会阻塞线程。因此,开发者需要谨慎地权衡同步的粒度,尽可能减少锁的范围,...
六、synchronized 同步锁概念及使用方法 Synchronized 同步锁的作用是解决多线程访问实例变量时可能造成的数据脏读现象。Synchronized 的使用方法有四种: 1. synchronized 修饰普通方法 2. synchronized 修饰普通...
通过使用`synchronized`,可以确保同一时刻只有一个线程能够访问被标记为同步的方法或代码块,从而避免多线程环境下的数据不一致问题。 #### 一、基本概念 `synchronized`关键字主要具有以下特性: 1. **互斥性**...
Java 中的 Lock 和 Synchronized 的区别 Java 语言中有很多相似关键字或相似意义的字,但 lock 和 synchronized 是两个最容易混淆的关键字。它们都是锁的意思,都是为了线程安全性、应用合理性和运行效率的。下面...
每个Java对象都可以作为锁,当线程访问`synchronized`方法或同步代码块时,都会获取到对应的锁。对于实例方法,锁是当前对象实例;对于静态方法,锁是该类的Class对象。 5. **进入和退出同步块的规则** - **线程...