易截截图软件、单文件、免安装、纯绿色、仅160KB

java线程同步问题

一般,有3种使用锁进行同步的方法
    a.方法同步,例如public synchronized void xxx()...
    b.静态方法同步,例如public static synchronized void xxx()...
    c.程序块同步,例如
        ...
        synchronized(object oLock)    //注意:object不一定是该类的实例
        {
            ...
        }
   
    在用法a中,当某线程执行方法xxx时,jvm会锁定该类的实例,直到方法xxx执行完毕。执行xxx的过程看看成是这样的:
    *请求得到类实例的实例锁,假如有其他线程在执行,则等待;
    *得到实例锁,执行xxx;
    *执行完毕,释放实例锁;
    注意,这个过程是jvm完成的,我们只需要把某个对象方法声明为synchronized即可,实例锁可以理解为实例本身。
   
在用法b中,当某线程执行静态方法xxx时,也是有jvm控制经过以上的3个步骤,所不同的是由于此时不存在类实例(静态方法嘛),所
以用法a中实例锁被实例的类的锁取代,其实对我们编程来讲,几乎没有任何区别,我们只需要把静态方法声明为synchronized即可。
    在用法c中,oLock可以被理解为一个传接棒,它可以是任何类的实例,当某个线程试图访问声明为synchronized的程序块的时候,jvm
判断oLock是否被锁定,假如没有被锁定,则锁定oLock并执行该程序块。执行完毕释放该锁。
    在对象级使用锁(实例锁)通常是一种比较粗糙的方法,设想一下,假如一个对象可能去访问N个共享资源,那么假如有一个线程独占
了该对象,而仅仅是为了使用其中的一项资源的话,也会造成想访问其它资源的线程也处于堵塞状态。用程序块同步可以很好解决这个问题,
以下是使用被称为Fine_Grain_Lock的例子,看,效果是不是很high:
Java代码
class FineGrainLock {   
       MyMemberClass x, y;   
    Object xlock&


相关文档:

Java ArrayList使用总结(一)

   最近一直在使用Java,感觉它的越界检查非常有效。这一点对于初学者来说是非常重要的(提高程序的严谨性),对于有经验的程序员来说也很有帮助。Java中有一个很有效的ArrayList类(读者可以结合Java API
来学习它),。它和一般的数组不一样,不需要提前分配固定的空间(使用比较灵活),每次使用的时候可以添加 ......

Java中Byte型转字符串

public static String byteToString(byte src)
{
    String desc = null;
    int i = 0;    //取1个字节
    i = src&0xFF;
    desc = Integer.toHexString(i);
    if (desc.length() == 1) ......

JAVA线程之四:线程状态检查,后台线程及线程组

一,线程状态的检查
      一般情况下无法确定一个线程的运行状态,对于这些处于未知状态的线程,可以通过isAlive()方法用来确定一个线程是否仍处在活动状态。当然即使处于活动状态的线程也并不意味着这个线程一定正在运行,对于一个已开始运行但还没有完成任务的线程,这个方法返回值为true。
......

Java 日期加減

public static void main(String[] args) {
   String DATE_FORMAT = "yyyy-MM-dd";
   java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
     DATE_FORMAT);
   Calendar c1 = Calendar.getInstance();
   c1.set(1999, 0, 14);
&n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号