- 浏览: 297190 次
- 性别:
- 来自: 山东-东营-利津县
文章分类
- 全部博客 (155)
- J2SE (25)
- JavaScript (8)
- Linux (4)
- Struts (12)
- Mysql (8)
- Oracle (9)
- IT与生活 (12)
- EJB (7)
- JMS (1)
- Spring (5)
- Hibernate (6)
- Jsp&Servlet (4)
- 开发小技巧 (5)
- log4j (4)
- 面试题 (20)
- DWR (2)
- JBPM (1)
- iBATIS (4)
- 数据结构 (1)
- svn (1)
- 反编译 (1)
- DB2 (4)
- Tomcat (2)
- WebService (2)
- JBoss (5)
- jquery (1)
- HttpClient (1)
- jdom (1)
- mina (1)
最新评论
-
moment52:
为什么会选择用拦截器,不用action呢
使用ThreadLocal结合struts2的拦截器实现分页 -
wzk527:
很好
编程:编写一个截取字符串的函数,(网上流传的答案有的是错的)输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4 -
shijian2292:
lz辛苦了,写的真详细,我正郁闷这些问题呢,学习了。
struts2复习笔记(version2.1.6)(01~06) -
fgh2011:
如果想要在虚拟机之外的 局域网机器中访问应用 ip需要设置成自 ...
使用secureCRT连接用VMWare虚拟机装的Linux系统 -
wangljr:
...
什么是声明式事务?什么是编程式事务?
synchronized 的语法: 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授权的,均授权成功,同时进入到那段代码执行
发表评论
-
关于java读取properties文件的路径问题
2013-02-02 23:57 13152之前对于JAVA读取propertie ... -
StringBuffer与StringBuilder的区别
2012-07-23 16:08 0相信大家看到过很多比较String和StringBuffer区 ... -
java中Date与String的相互转化 (转)
2012-07-23 15:35 1291import java.text.DateFormat; ... -
使用eclipse fat插件制作可运行jar
2012-06-05 13:59 0转载自http://blog.csdn.net/jikeyzh ... -
使用eclipse fat插件制作可运行jar
2012-06-05 13:59 1097转载自http://blog.csdn.net/jikeyzh ... -
关于JAVA类中各个成分的初始化顺序(转载)
2012-04-28 23:30 840... -
关于J2SE一些细节问题的整理(如有错误,欢迎留言指正)
2011-10-23 16:03 10631、关于继承中private的 ... -
Java heap space[转]
2011-09-13 14:17 806PermGen space的全称是Permanent Gene ... -
super关键字与内存分布
2010-05-13 21:19 1211当我们new出一个子类对象的时候,这个子类对象内部肯定会包含一 ... -
继承中的构造方法
2010-05-13 21:12 10481、子类的构造过程中必须调用其基类的构造方法。 2、子类在自 ... -
关于方法的重载
2010-05-12 16:41 859public class Person { publ ... -
成员变量和局部变量的一点不同
2010-05-12 12:25 909在java中,如果你在class中定义了一个成员变量然 ... -
环境变量中的系统环境变量和用户环境变量有什么区别?
2010-05-10 21:31 2861系统环境变量的意思是无论你是用那个用户帐号登陆后都能够共 ... -
final关键字到底修饰了什么
2010-05-05 22:55 1064final使得被修饰的变量"不变",但是由 ... -
System.getProperty(String name)的常用值总结(转载)
2010-03-29 15:41 1087常用的System.getProperty(),这里贴一下,省 ... -
各种进制之间的转换(转载)
2010-03-24 11:59 1892各种进制转换 计算机中常用的数的进制主要有:二进制、八进制、十 ... -
Class.forName(String name)的作用(转载)
2010-03-22 23:08 1324Class.forName(xxx.xx.xx) 返回的是一个 ... -
ClassLoader的加载机制相关
2010-03-22 23:05 1005面试题:能不能自己写个类叫java.lang.String让泪 ... -
张孝祥J2SE加强自学笔记(48-56)
2010-03-22 22:49 169548、类加载器的一个高级问题的实验分析: 这次我们新建一个w ... -
张孝祥J2SE加强自学笔记(41-47)
2010-03-22 22:46 134741、自定义泛型方法的练习与类型推断总结: (1)编写一个方 ...
相关推荐
3. 多线程:介绍线程的创建和管理,线程同步机制,如synchronized关键字,wait和notify方法,以及线程池的使用。 4. 反射:讨论Java反射机制,它允许程序在运行时访问和修改类的行为,是框架开发中的重要技术。 5....
1. **基本语法**:Java是一种静态类型的面向对象编程语言,其语法严谨。学习Java首先要了解变量声明、数据类型(如int、String等)、运算符、控制结构(如if语句、for循环、while循环)以及方法定义。 2. **类与...
4. **多线程**:Java中的线程创建方式(Thread类和Runnable接口),线程同步机制(synchronized,volatile,Lock,Semaphore等),以及死锁、活锁、饥饿现象的解释和避免策略。 5. **异常处理**:理解Checked异常和...
- **Java语法**:包括类、对象、接口、继承、多态等面向对象概念。 - **数据类型**:了解基本和引用数据类型的区别,以及自动装箱拆箱。 - **内存管理**:理解堆栈内存分配,垃圾回收机制(GC)及其原理。 - **...
6. **多线程**:学习如何创建和管理线程,理解同步机制,如synchronized关键字、wait()、notify()等。通过习题,可以实践多线程编程,解决并发问题。 7. **反射**:掌握Java反射机制,能够动态地获取类的信息并调用...