- 浏览: 156809 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (90)
- 敏捷 (0)
- 领域驱动设计 (1)
- 设计模式与重构 (4)
- Spring (4)
- IBatis (1)
- Ext (3)
- JavaScript (2)
- Oracle (7)
- DB2 (0)
- SQL基础及优化 (8)
- 数据库基础知识 (2)
- 感悟 (4)
- 网络 (1)
- Java基础 (11)
- weblogic (2)
- websphere (0)
- OSWorkFlow (4)
- 报表 (2)
- ETL (3)
- 笔试面试 (1)
- Struts2 (0)
- Servlet (2)
- UML (2)
- CSS (0)
- Acegi (0)
- TDD (0)
- 项目管理 (0)
- 系统设计 (1)
- 数据仓库 (1)
- Tomcat (2)
- DWR (1)
- GreenPlum (1)
- MySQL (1)
- 开发环境 (2)
- POI (1)
- Java综合 (3)
- 行业思考 (1)
- 札记 (0)
- English (1)
- 工具 (0)
- Shell (2)
- JQuery (3)
- JMS (1)
- JVM (1)
最新评论
-
南京玄武:
谢谢~ 这个也是你吗?http://www.codeweblo ...
P6Spy not Suitable Driver -
longzw:
问一下,怎么创建表空间的,在greenPlum我这里是装在虚拟 ...
GreenPlum AdminGuide 阅读笔记 -
softctwo:
还有p6spy不能过滤result的输出,sql查询的结果集都 ...
P6Spy not Suitable Driver -
jamesji:
Cognos 的产品除了好看以外,垃圾的地方很多。建议直接使用 ...
2个web应用集成问题解决 -
kanny87929:
你说了半天不知道你在说什么
保险公司IT部门的环境待遇问题
public class SychronizedTest implements Runnable { private Timer t = new Timer(); public static void main(String[] args) { SychronizedTest st = new SychronizedTest(); Thread thread1 = new Thread(st, "Thread1"); Thread thread2 = new Thread(st, "Thread2"); thread1.start(); thread2.start(); } public void run() { this.t.add(); } } class Timer { private Integer i = 0; private Object o = new Object(); public void add() { //i 没有被2个线程竞争,2个线程都可以获得对i的锁,但是如果换成o,则一个线程等待一个线程阻塞 //synchronized (o) { synchronized (i) { this.i++; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("您是第" + this.i + "个使用i的线程," + Thread.currentThread().getName()); } } }
//i 没有被2个线程竞争,2个线程都可以获得对i的锁,但是如果换成o,则一个线程等待一个线程阻塞
有点奇怪,换成atmoicinteger也是可以的,观察线程栈也可以说明这一点
"Thread2" prio=6 tid=0x17122400 nid=0x1d18 at breakpoint[0x172df000]
java.lang.Thread.State: RUNNABLE
at com.google.prophet.quickstart.basic.thread.Timer.add(SychronizedTest.java:34)
- locked <0x02fb05c8> (a java.lang.Integer)
at com.google.prophet.quickstart.basic.thread.SychronizedTest.run(SychronizedTest.java:19)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
"Thread1" prio=6 tid=0x17121800 nid=0x18b8 at breakpoint[0x1728f000]
java.lang.Thread.State: RUNNABLE
at com.google.prophet.quickstart.basic.thread.Timer.add(SychronizedTest.java:34)
- locked <0x02fb05f8> (a java.lang.Integer)
at com.google.prophet.quickstart.basic.thread.SychronizedTest.run(SychronizedTest.java:19)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
0x02fb05f8
0x02fb05c8
Integer是一个对象但是id却不同,可能这个Integer各自在2个线程的工作内存中,而不是共享内存中,目前我只能这么解释,而Object,或者是AtomicInteger则是创建在了共享内存中,所以可以进行同步。
发表评论
-
Java基础-泛型
2011-08-12 16:58 1078泛型和序列化??? ... -
Java基础-访问控制
2011-08-03 16:51 7831、static的 final的 private 都不能和ab ... -
Java基础-数组
2011-08-03 16:29 5791、数组的声明 int[5];//error 声明、 ... -
Java基础-基本类型及关键字
2011-08-03 14:00 922int x=253,34 //error char ... -
可重入锁的几个疑问
2011-07-20 10:22 15311、被争夺的公平锁要比不公平锁的吞吐率更低吗?? 是的 ... -
一次JVM调优实验(java分布式应用札记)
2011-03-27 21:57 1025package com.google.prophet.quic ... -
读书笔记20110303
2011-03-03 22:41 0原型继承的方式,自身然后原型然后父类的原型 原型为父类 ... -
读书札记20110227
2011-02-27 13:30 0Double、String是final类 Intege ... -
对称加密和非对称加密的区别
2011-02-26 23:10 0对称加密就是加密和解密的密钥是同一个,非对称加密不是同一个 -
一些jar包的作用
2010-11-29 22:20 869commons-digesterDigester基于 ... -
Java集合常见问题探讨
2010-09-18 15:08 10511、LinkedHashMap 与HashMap比较 Has ... -
什么是javabean
2010-08-02 23:51 01、具有符合规范的get、set方法 2、具有无参数的 ... -
对线程安全的理解
2010-07-23 11:18 1187方法也有同步一说,对象也有同步一说。本质上同步的就是对象。 ... -
几个基础知识点
2010-06-25 22:42 01、如何替换第一次出现的字符串 System.out.pri ... -
JasperReport的使用
2010-05-10 20:29 0前一个项目用的是birt问题不少。 1、查询显示速度慢 ... -
Java内存泄露
2010-04-25 22:23 0Java没有真正的内存泄露,只是内存没有释放,但是是一个无用的 ... -
Java集合常见问题探讨
2010-04-25 22:17 01、LinkedList、ArrayList、Vector ... -
ConcurrentHashMap分析
2010-04-25 22:08 0关键字: concurrenthashmap原理分析 ... -
Java对象的序列化和反序列化实践
2010-04-25 22:07 02007-09-19 09:01作者:佚名出处:论坛整理 ... -
Struts2的拦截器源码(checkbox 拦截器)
2010-03-30 21:30 01、Checkbox拦截器 标签生成的checkbox ...
相关推荐
•但对引用类型的变量而言,它仅仅保存的是一个引用,final只能保证他的地址不变,但不能保证对象,所以引用 类型完全可以改变他的对象。 可执行“宏替换”的final变量 •对一个final变量来说,不管它...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...
修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...
答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新的对象,StringBuffer是可变的字符序列,所以如果要经常改变某个字符串的话建议使用StringBuffer。 list、set、map问题? 答:set 不允许...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...
B) 可以为抽象类定义对象,但是不能为接口定义对象。 C) 抽象类与接口的用法几乎都相同,具体用哪一个方法,只是在于程序设计人员的编程习惯而已。 D) 在Java中,最多使用的是抽象类,因为应用抽象类也可以实现多...
因此通常建议能提前预估 HashMap 的大小最好,尽量的减少扩容带来的性能损耗。 根据代码可以看到其实真正存放数据的是 transient Entry,V>[] table = (Entry,V>[]) EMPTY_TABLE; 这个数组,那么它又是如何定义的...
System.out.printf("\n%d不在1至99999之间",number); } } } 实验3 猜数字游戏 2.模板代码 GuessNumber.java import javax.swing.JOptionPane; public class GuessNumber { public static void main (String...
(1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print(...