??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产欧美国产综合一区 ,亚洲综合无码AV一区二区,激情亚洲一区国产精品http://m.tkk7.com/liyingcheng/archive/2008/01/08/173840.html飘雪飘雪Tue, 08 Jan 2008 15:47:00 GMThttp://m.tkk7.com/liyingcheng/archive/2008/01/08/173840.htmlhttp://m.tkk7.com/liyingcheng/comments/173840.htmlhttp://m.tkk7.com/liyingcheng/archive/2008/01/08/173840.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/173840.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/173840.html java 修改pȝ旉Ҏ(gu)

W一U方法:(x)

需下蝲 jna.jar                           

a) 创徏 Kernel32 接口

package  time.test;

import  com.sun.jna.Native;
import  com.sun.jna.Structure;
import  com.sun.jna.win32.StdCallLibrary;

public   interface  Kernel32  extends  StdCallLibrary
{
    Kernel32 INSTANCE 
=  (Kernel32)Native.loadLibrary( " kernel32 " , Kernel32. class );
    
public  SYSTEMTIME GetSystemTime();

    
public   void  SetLocalTime(SYSTEMTIME localTime);

    
public   static   class  SYSTEMTIME  extends  Structure
    
{
    
// 必须有这么多个字D?按这个顺序定义属?/span>
 
         public   short  wYear;
        
public   short  wMonth;
             public short wDayOfWeek;
        
public   short  wDay;
        
public   short  wHour;
        
public   short  wMinute;
        
public   short  wSecond;
        
public   short  wMilliseconds;
       
    }

}

b) 修改旉

 

import  time.test.Kernel32.SYSTEMTIME;


public   class  SysTimeSettingDaoImp
{
    
protected   void  setLocalTime(String time)
    
{
      
// time旉格式?4位的字符Ԍ?20080108152130"
        Short year  =  Short.parseShort(time.substring( 0 4 ));
        Short month 
=  Short.parseShort(time.substring( 4 6 ));
        Short day 
=  Short.parseShort(time.substring( 6 8 ));
        Short hour 
=  Short.parseShort(time.substring( 8 10 ));
        Short minute 
=  Short.parseShort(time.substring( 10 12 ));
        Short second 
=  Short.parseShort(time.substring( 12 14 ));

        SYSTEMTIME ss 
=   new  SYSTEMTIME();
        ss.setWYear(year);
        ss.setWMonth(month);
        ss.setWDay(day);
        ss.setWHour(hour);
        ss.setWMinute(minute);
        ss.setWSecond(second);

        Kernel32 lib 
=  Kernel32.INSTANCE;
        lib.SetLocalTime(ss);
    }

}

W二U方?/span>

 

public   class  MyTimeClass
{
            
// timeAndDate格式?4位的字符串表CŞ式?/span>
             public   void  setLocalTime(String timeAndDate)
            
{
                            String date 
=  getDate(timeAndDate);
                            String time 
=  getTime(timeAndDate);
            
                            
//  修改pȝ日期和时?/span>
                            Runtime.getRuntime().exec( " cmd /c date  "   +  date);
                            Runtime.getRuntime().exec(
" cmd /c time  "   +  time);
            }

            
public  String getDate(String timeAndDate)
            
{
                    String year 
=  timeAndDate.substring( 0 4 );
                    String month 
=  timeAndDate.substring( 4 6 );
                    String day 
=  timeAndDate.substring( 6 8 );
                    
return  year  +   " - "   +  month  +   " - "   +  day;
            }

            
public  String getTime(String timeAndDate)
            
{
                    String hour 
=  timeAndDate.substring( 8 10 );
                    String minute 
=  timeAndDate.substring( 10 12 );
                    String second 
=  timeAndDate.substring( 12 14 );
                    
return  hour  +   " : "   +  minute  +   " : "   +  second;
            }

}

Linuxpȝ修改旉

  String os  =  System.getProperty( " os.name " ).toLowerCase(); // 获取操作pȝ名称

if (os.indexOf( " windows " !=   - 1 )
{
    cmd 
=   " cmd /c time  "   +  timeStr;
    ProcessUtil.printErr(Runtime.getRuntime().exec(cmd));
    cmd 
=   " cmd /c date  "   +  timeStr;
    ProcessUtil.printErr(Runtime.getRuntime().exec(cmd));
   }

   
else
   
{  
    cmd 
=   " date  "   +  timeStr; //timeStr旉到分Q先写时间再写日?br />    ProcessUtil.printErr(Runtime.getRuntime().exec(cmd));
   }


public class ProcessUtil {
   
    public static void printErr(Process p) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            p.destroy();
        }
    }
   
    public static void printConsole(Process p) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
   
    public static String getErrInfo(Process p) {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}


 



飘雪 2008-01-08 23:47 发表评论
]]>
DBCP数据库连接池http://m.tkk7.com/liyingcheng/archive/2007/11/05/158321.html飘雪飘雪Mon, 05 Nov 2007 10:15:00 GMThttp://m.tkk7.com/liyingcheng/archive/2007/11/05/158321.htmlhttp://m.tkk7.com/liyingcheng/comments/158321.htmlhttp://m.tkk7.com/liyingcheng/archive/2007/11/05/158321.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/158321.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/158321.html阅读全文

飘雪 2007-11-05 18:15 发表评论
]]>
java多线E学?/title><link>http://m.tkk7.com/liyingcheng/archive/2007/10/26/156175.html</link><dc:creator>飘雪</dc:creator><author>飘雪</author><pubDate>Fri, 26 Oct 2007 08:10:00 GMT</pubDate><guid>http://m.tkk7.com/liyingcheng/archive/2007/10/26/156175.html</guid><wfw:comment>http://m.tkk7.com/liyingcheng/comments/156175.html</wfw:comment><comments>http://m.tkk7.com/liyingcheng/archive/2007/10/26/156175.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/liyingcheng/comments/commentRss/156175.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/liyingcheng/services/trackbacks/156175.html</trackback:ping><description><![CDATA[一Q理解多U程 <br /><br />??多线E是q样一U机Ӟ它允许在E序中ƈ发执行多个指令流Q每个指令流都称Z个线E,彼此间互相独立?U程又称量q程Q它和进E一h有独立的执行控制Q由操作pȝ负责调度Q区别在于线E没有独立的存储I间Q而是和所属进E中的其它线E共享一个存储空_(d)q得线E间的通信q较q程单?<br /><br />??多个U程的执行是q发的,也就是在逻辑上“同时”,而不是否是物理上的“同时”。如果系l只有一个CPUQ那么真正的“同时”是不可能的Q但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它Q只需要设惛_个线E是同时执行卛_?<br />多线E和传统的单U程在程序设计上最大的区别在于Q由于各个线E的控制彼此独立,使得各个U程之间的代码是乱序执行的,由此带来的线E调度,同步{问题,在以后探讨?<br /><br />  二:(x)在Java中实现多U程 <br /><br />??我们不妨设想Qؓ(f)了创Z个新的线E,我们需要做些什么?很显Ӟ我们必须指明q个U程所要执行的代码Q而这是在Java中实现多U程我们所需要做的一切! <br /><br />??真是奇QJava是如何做到这一点的Q通过c!作ؓ(f)一个完全面向对象的语言QJava提供了类 java.lang.Thread 来方便多U程~程Q这个类提供了大量的Ҏ(gu)来方便我们控制自q各个U程Q我们以后的讨论都将围绕q个c进行?<br /><br />??那么如何提供l?Java 我们要线E执行的代码呢?让我们来看一?Thread cRThread cL重要的方法是 run() Q它为Thread cȝҎ(gu) start() 所调用Q提供我们的U程所要执行的代码。ؓ(f)了指定我们自q代码Q只需要覆盖它Q?<br /><br />  Ҏ(gu)一Q?Thread c,覆盖Ҏ(gu) run()Q我们在创徏?Thread cȝ子类中重?run() ,加入U程所要执行的代码卛_。下面是一个例子:(x) <br /><br />public class MyThread extends Thread { <br /> int count= 1, number; <br /> public MyThread(int num) { <br />  number = num; <br />  System.out.println("创徏U程 " + number); <br /> } <br /> public void run() { <br />  while(true) { <br />   System.out.println("U程 " + number + ":计数 " + count); <br />   if(++count== 6) return; <br />  } <br /> } <br /> public static void main(String args[]) { <br />  for(int i = 0; i ?5; i++) new MyThread(i+1).start(); <br /> } <br />} <br /><br />??q种Ҏ(gu)单明了,W合大家的习(fn)惯,但是Q它也有一个很大的~点Q那是如果我们的类已经从一个类l承Q如程序必ȝ承自 Applet c)Q则无法再?Thread c,q时如果我们又不惛_立一个新的类Q应该怎么办呢Q?<br /><br />??我们不妨来探索一U新的方法:(x)我们不创?Thread cȝ子类Q而是直接使用它,那么我们只能我们的Ҏ(gu)作ؓ(f)参数传递给 Thread cȝ实例Q有点类似回调函数。但?Java 没有指针Q我们只能传递一个包含这个方法的cȝ实例。那么如何限制这个类必须包含q一Ҏ(gu)呢?当然是用接口!Q虽然抽象类也可满Q但是需要承,而我们之所以要采用q种新方法,不就是ؓ(f)了避免承带来的限制吗?Q?<br />Java 提供了接?java.lang.Runnable 来支持这U方法?<br /><br />  Ҏ(gu)二:(x)实现 Runnable 接口 <br /><br />??Runnable 接口只有一个方?run()Q我们声明自qcd?Runnable 接口q提供这一Ҏ(gu)Q将我们的线E代码写入其中,完成了q一部分的Q务。但?Runnable 接口q没有Q何对U程的支持,我们q必d?Thread cȝ实例Q这一炚w过 Thread cȝ构造函数public Thread(Runnable target);来实现。下面是一个例子:(x) <br /><br />public class MyThread implements Runnable { <br /> int count= 1, number; <br /> public MyThread(int num) { <br />  number = num; <br />  System.out.println("创徏U程 " + number); <br /> } <br /> public void run() { <br />  while(true) { <br />   System.out.println("U程 " + number + ":计数 " + count); <br />   if(++count== 6) return; <br />  } <br /> } <br /> public static void main(String args[]) { <br />  for(int i = 0; i ?5; i++) new Thread(new MyThread(i+1)).start(); <br /> } <br />} <br /><br />??严格地说Q创?Thread 子类的实例也是可行的Q但是必L意的是,该子cdL有覆?Thread cȝ run Ҏ(gu)Q否则该U程执行的将是子cȝ run Ҏ(gu)Q而不是我们用以实现Runnable 接口的类?run Ҏ(gu)Q对此大家不妨试验一下?<br /><br />  使用 Runnable 接口来实现多U程使得我们能够在一个类中包Ҏ(gu)有的代码Q有利于装Q它的缺点在于,我们只能使用一套代码,若想创徏多个U程q各个U程执行不同的代码,则仍必须额外创徏c,如果q样的话Q在大多数情况下也许q不如直接用多个cd别?Thread 来得紧凑?<br /><br />  lg所qͼ两种Ҏ(gu)各有千秋Q大家可以灵z运用?<br /><br />  下面让我们一h研究一下多U程使用中的一些问题?<br />  三:(x)U程的四U状?<br /><br />  1. 新状态:(x)U程已被创徏但尚未执行(start() 未被调用)?<br /><br />  2. 可执行状态:(x)U程可以执行Q虽然不一定正在执行。CPU 旉随时可能被分配给该线E,从而得它执行?<br /><br />  3. M状态:(x)正常情况?run() q回使得U程M。调?stop()?destroy() 亦有同样效果Q但是不被推荐,前者会(x)产生异常Q后者是强制l止Q不?x)释N?<br /><br />  4. d状态:(x)U程不会(x)被分?CPU 旉Q无法执行?<br /><br />  四:(x)U程的优先 <br /><br />??U程的优先代表该线E的重要E度Q当有多个线E同时处于可执行状态ƈ{待获得 CPU 旉ӞU程调度pȝҎ(gu)各个U程的优先来决定给谁分?CPU 旉Q优先高的U程有更大的Z(x)获得 CPU 旉Q优先低的U程也不是没有机?x),只是Z(x)要小一些Ş了?<br /><br />??你可以调?Thread cȝҎ(gu) getPriority() ?setPriority()来存取线E的优先U,U程的优先界于1(MIN_PRIORITY)?0(MAX_PRIORITY)之间Q缺省是5(NORM_PRIORITY)?<br /><br />  五:(x)U程的同?<br /><br />??׃同一q程的多个线E共享同一片存储空_(d)在带来方便的同时Q也带来了访问冲H这个严重的问题。Java语言提供了专门机制以解决q种冲突Q有效避免了同一个数据对象被多个U程同时讉K?<br /><br />  ׃我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对Ҏ(gu)提出一套机Ӟq套机制是 synchronized 关键字,它包括两U用法:(x)synchronized Ҏ(gu)?synchronized 块?<br /><br />  1. synchronized Ҏ(gu)Q通过在方法声明中加入 synchronized关键字来声明 synchronized Ҏ(gu)。如Q?<br /><br />public synchronized void accessVal(int newVal); <br /><br />  synchronized Ҏ(gu)控制对类成员变量的访问:(x)每个cd例对应一把锁Q每?synchronized Ҏ(gu)都必获得调用该Ҏ(gu)的类实例的锁方能执行Q否则所属线E阻塞,Ҏ(gu)一旦执行,q占该锁,直到从该Ҏ(gu)q回时才锁释放Q此后被d的线E方能获得该锁,重新q入可执行状态。这U机制确保了同一时刻对于每一个类实例Q其所有声明ؓ(f) synchronized 的成员函C臛_只有一个处于可执行状态(因ؓ(f)臛_只有一个能够获得该cd例对应的锁)Q从而有效避免了cL员变量的讉K冲突Q只要所有可能访问类成员变量的方法均被声明ؓ(f) synchronizedQ?<br /><br />  ?Java 中,不光是类实例Q每一个类也对应一把锁Q这h们也可将cȝ静态成员函数声明ؓ(f) synchronized Q以控制其对cȝ静态成员变量的讉K?<br /><br />  synchronized Ҏ(gu)的缺P(x)若将一个大的方法声明ؓ(f)synchronized 会(x)大大影响效率Q典型地Q若线E类的方?run() 声明?synchronized Q由于在U程的整个生命期内它一直在q行Q因此将D它对本类M synchronized Ҏ(gu)的调用都永远不会(x)成功。当然我们可以通过访问类成员变量的代码放C门的Ҏ(gu)中,其声明?synchronized Qƈ在主Ҏ(gu)中调用来解决q一问题Q但?Java 为我们提供了更好的解军_法,那就?synchronized 块?<br /><br />  2. synchronized 块:(x)通过 synchronized关键字来声明synchronized 块。语法如下:(x) <br /><br />synchronized(syncObject) { <br />//允许讉K控制的代?<br />} <br /><br />??synchronized 块是q样一个代码块Q其中的代码必须获得对象 syncObject Q如前所qͼ可以是类实例或类Q的锁方能执行,具体机制同前所q。由于可以针对Q意代码块Q且可Q意指定上锁的对象Q故灉|性较高。?br />  六:(x)U程的阻? <p>??Z解决对共享存储区的访问冲H,Java 引入了同步机Ӟ现在让我们来考察多个U程对共享资源的讉KQ显然同步机制已l不够了Q因为在L时刻所要求的资源不一定已l准备好了被讉KQ反q来Q同一时刻准备好了的资源也可能不止一个。ؓ(f)了解册U情况下的访问控刉题,Java 引入了对d机制的支持?</p><p>??d指的是暂停一个线E的执行以等待某个条件发生(如某资源qAQ,学过操作pȝ的同学对它一定已l很熟?zhn)了。Java 提供了大量方法来支持dQ下面让我们逐一分析?</p><p>  1. sleep() Ҏ(gu)Qsleep() 允许 指定以毫Uؓ(f)单位的一D|间作为参敎ͼ它得线E在指定的时间内q入d状态,不能得到CPU 旉Q指定的旉一q,U程重新q入可执行状态?</p><p>  典型圎ͼsleep() 被用在等待某个资源就l的情ŞQ测试发现条件不满后,让线E阻塞一D|间后重新试Q直到条件满ؓ(f)止?</p><p>  2. suspend() ?resume() Ҏ(gu)Q两个方法配套用,suspend()使得U程q入d状态,q且不会(x)自动恢复Q必d对应的resume() 被调用,才能使得U程重新q入可执行状态。典型地Qsuspend() ?resume() 被用在等待另一个线E生的l果的情形:(x)试发现l果q没有生后Q让U程dQ另一个线E生了l果后,调用 resume() 使其恢复?</p><p>  3. yield() Ҏ(gu)Qyield() 使得U程攑ּ当前分得?CPU 旉Q但是不使线E阻塞,即线E仍处于可执行状态,随时可能再次分得 CPU 旉。调?yield() 的效果等价于调度E序认ؓ(f)该线E已执行了够的旉从而{到另一个线E?</p><p>  4. wait() ?notify() Ҏ(gu)Q两个方法配套用,wait() 使得U程q入d状态,它有两种形式Q一U允?指定以毫Uؓ(f)单位的一D|间作为参敎ͼ另一U没有参敎ͼ前者当对应?notify() 被调用或者超出指定时间时U程重新q入可执行状态,后者则必须对应?notify() 被调用?</p><p>??初看h它们?suspend() ?resume() Ҏ(gu)Ҏ(gu)有什么分别,但是事实上它们是截然不同的。区别的核心在于Q前面叙q的所有方法,d旉不会(x)释放占用的锁Q如果占用了的话Q,而这一Ҏ(gu)法则相反?</p><p>  上述的核心区别导致了一pd的细节上的区别?</p><p>??首先Q前面叙q的所有方法都隶属?Thread c,但是q一对却直接隶属?Object c,也就是说Q所有对象都拥有q一Ҏ(gu)法。初看v来这十分不可思议Q但是实际上却是很自然的Q因一Ҏ(gu)法阻塞时要释攑֍用的锁,而锁是Q何对象都h的,调用L对象?wait() Ҏ(gu)DU程dQƈ且该对象上的锁被释放。而调?L对象的notify()Ҏ(gu)则导致因调用该对象的 wait() Ҏ(gu)而阻塞的U程中随机选择的一个解除阻塞(但要{到获得锁后才真正可执行Q?</p><p>??其次Q前面叙q的所有方法都可在M位置调用Q但是这一Ҏ(gu)法却必须?synchronized Ҏ(gu)或块中调用,理由也很单,只有在synchronized Ҏ(gu)或块中当前线E才占有锁,才有锁可以释放。同L(fng)道理Q调用这一Ҏ(gu)法的对象上的锁必Mؓ(f)当前U程所拥有Q这h有锁可以释放。因此,q一Ҏ(gu)法调用必L|在q样?synchronized Ҏ(gu)或块中,该方法或块的上锁对象是调用q一Ҏ(gu)法的对象。若不满一条gQ则E序虽然仍能~译Q但在运行时?x)出现IllegalMonitorStateException 异常?</p><p>??wait() ?notify() Ҏ(gu)的上q特性决定了它们l常和synchronized Ҏ(gu)或块一起用,它们和操作pȝ的进E间通信机制作一个比较就?x)发现它们的怼性:(x)synchronizedҎ(gu)或块提供了类g操作pȝ原语的功能,它们的执行不?x)受到多U程机制的干扎ͼ而这一Ҏ(gu)法则相当?block 和wakeup 原语Q这一Ҏ(gu)法均声明?synchronizedQ。它们的l合使得我们可以实现操作pȝ上一pd_֦的进E间通信的算法(如信号量法Q,q用于解军_U复杂的U程间通信问题?</p><p>  关于 wait() ?notify() Ҏ(gu)最后再说明两点Q?</p><p>??W一Q调?notify() Ҏ(gu)D解除d的线E是从因调用该对象的 wait() Ҏ(gu)而阻塞的U程中随机选取的,我们无法预料哪一个线E将?x)被选择Q所以编E时要特别小心,避免因这U不定性而生问题?</p><p>??W二Q除?notify()Q还有一个方?notifyAll() 也可起到cM作用Q唯一的区别在于,调用 notifyAll() Ҏ(gu)把因调用该对象?wait() Ҏ(gu)而阻塞的所有线E一ơ性全部解除阻塞。当Ӟ只有获得锁的那一个线E才能进入可执行状态?</p><p>??谈到dQ就不能不谈一谈死锁,略一分析p发现Qsuspend() Ҏ(gu)和不指定时期限?wait() Ҏ(gu)的调用都可能产生死锁。遗憄是,Java q不在语aU别上支持死锁的避免Q我们在~程中必d心地避免死锁?</p><p>??以上我们?Java 中实现线E阻塞的各种Ҏ(gu)作了一番分析,我们重点分析?wait() ?notify() Ҏ(gu)Q因为它们的功能最强大Q用也最灉|Q但是这也导致了它们的效率较低,较容易出错。实际用中我们应该灉|使用各种Ҏ(gu)Q以便更好地辑ֈ我们的目的?</p><p>  七:(x)守护U程 </p><p>??守护U程是一cȝD的U程Q它和普通线E的区别在于它ƈ不是应用E序的核心部分,当一个应用程序的所有非守护U程l止q行Ӟ即仍然有守护线E在q行Q应用程序也终止,反之Q只要有一个非守护U程在运行,应用E序׃?x)终止。守护线E一般被用于在后Cؓ(f)其它U程提供服务?</p><p>  可以通过调用Ҏ(gu) isDaemon() 来判断一个线E是否是守护U程Q也可以调用Ҏ(gu) setDaemon() 来将一个线E设为守护线E?</p><p>  八:(x)U程l?</p><p>??U程l是一?Java Ҏ(gu)的概念,?Java 中,U程l是cThreadGroup 的对象,每个U程都隶属于唯一一个线E组Q这个线E组在线E创建时指定q在U程的整个生命期内都不能更改。你可以通过调用包含 ThreadGroup cd参数?Thread cL造函数来指定U程属的U程l,若没有指定,则线E缺省地隶属于名?system 的系l线E组?</p><p>???Java 中,除了预徏的系l线E组外,所有线E组都必L式创建。在 Java 中,除系l线E组外的每个U程l又隶属于另一个线E组Q你可以在创建线E组时指定其所隶属的线E组Q若没有指定Q则~省地隶属于pȝU程l。这P所有线E组l成了一以pȝU程lؓ(f)根的?wi)?</p><p>??Java 允许我们对一个线E组中的所有线E同时进行操作,比如我们可以通过调用U程l的相应Ҏ(gu)来设|其中所有线E的优先U,也可以启动或d其中的所有线E?</p><p>  Java 的线E组机制的另一个重要作用是U程安全。线E组机制允许我们通过分组来区分有不同安全Ҏ(gu)的U程Q对不同l的U程q行不同的处理,q可以通过U程l的分层l构来支持不对等安全措施的采用。Java ?ThreadGroup cL供了大量的方法来方便我们对线E组?wi)中的每一个线E组以及(qing)U程l中的每一个线E进行操作?</p><p>  ?ji)?x)ȝ </p><p>??在本文中Q我们讲qC Java 多线E编E的Ҏ(gu)面面Q包括创建线E,以及(qing)对多个线E进行调度、管理。我们深刻认识到了多U程~程的复杂性,以及(qing)U程切换开销带来的多U程E序的低效性,q也促我们认真地思考一个问题:(x)我们是否需要多U程Q何旉要多U程Q?</p><p>??多线E的核心在于多个代码块ƈ发执行,本质特点在于各代码块之间的代码是乱序执行的。我们的E序是否需要多U程Q就是要看这是否也是它的内在特点?</p><p>??假如我们的程序根本不要求多个代码块ƈ发执行,那自然不需要用多U程Q假如我们的E序虽然要求多个代码块ƈ发执行,但是却不要求乱序Q则我们完全可以用一个@环来单高效地实现Q也不需要用多U程Q只有当它完全符合多U程的特Ҏ(gu)Q多U程机制对线E间通信和线E管理的强大支持才能有用武之圎ͼq时使用多线E才是值得的?br /><br />转自Q?a >http://ssby.blogdriver.com/ssby/</a></p><img src ="http://m.tkk7.com/liyingcheng/aggbug/156175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/liyingcheng/" target="_blank">飘雪</a> 2007-10-26 16:10 <a href="http://m.tkk7.com/liyingcheng/archive/2007/10/26/156175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java常用学习(fn)Q{载)http://m.tkk7.com/liyingcheng/archive/2007/10/26/156123.html飘雪飘雪Fri, 26 Oct 2007 05:52:00 GMThttp://m.tkk7.com/liyingcheng/archive/2007/10/26/156123.htmlhttp://m.tkk7.com/liyingcheng/comments/156123.htmlhttp://m.tkk7.com/liyingcheng/archive/2007/10/26/156123.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/156123.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/156123.html阅读全文

飘雪 2007-10-26 13:52 发表评论
]]>
?MyEclipse 5.1GA 上?XFire ~写 Web Service Q{载)http://m.tkk7.com/liyingcheng/archive/2007/10/24/155602.html飘雪飘雪Wed, 24 Oct 2007 07:11:00 GMThttp://m.tkk7.com/liyingcheng/archive/2007/10/24/155602.htmlhttp://m.tkk7.com/liyingcheng/comments/155602.htmlhttp://m.tkk7.com/liyingcheng/archive/2007/10/24/155602.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/155602.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/155602.html

?MyEclipse 5.1GA 上?XFire ~写 Web Service

Posted on 2006-11-16 00:04 Stephen Wong 阅读(1320) 评论(0)  ~辑  收藏 所属分c? WebService ?a >Java ?a >J2EE ?a >Java 开发环?/font>
   来源Q?a >http://tech.it168.com/j/e/2006-10-28/200610281432707.shtml    Q?font color="#ff0000">U色部分为实验批?/font>Q?br />
附:(x)MyEclipse 5.0 官方提供?strong>图文教程Q?br />
http://www.myeclipseide.com/ContentExpress-display-ceid-81.html#webservices

   开发环?/strong>
    Sun Java 5+ Eclipse 3.2 +MyEclipse 5.0.0. 

    概述 

    本文介绍了用MyEclipse Web Service来迅速开发和试一个HelloWorld Web Service,其中包括: 
    1. 介绍了MyEclipse Web Services的基本概念?br />    2. 创徏一个MyEclipse Web Services工程 
    3. 创徏一个简单的HelloWorld Web Service 
    4. 在Web容器?如Tomcat 5中部|Web Service 
    5. 使用Web Services Explorer来测试部|的Web Services 

    XFire Java SOAP框架概述 
    MyEclipse Web Services是徏立在XFire Java SOAP框架和工具基上的, XFire是一Ƒּ源的Java SOAP框架。它拥有一个轻量的信息处理模块,通过STAX来与SOAP信息相结合。提供了一个工作在Web Services下的单APIQ支持POJO和schema开? XFire支持 Web Services standards,Spring 整合, 支持JBI , 支持 JAXB ,XMLBeans,Java 5 和JAX-WS.q支持HTTP, JMS, XMPP, In-memory传输协议. 

    一. 创徏Web Service工程 

    在MyEclipse 5.0中引入了一个新的工E类型即Web Service工程,该工E扩展了MyEclipse Web Project来支持额外的Web Service配置,开发和部v.本部分将使用Web Services Project wizard来创建和配置一个新的Web Service Projects Web Service Wizard完成下列的动作: 
    创徏MyEclipse J2EE Web Project 
    在工E中的web.xml文g中配|XFire Servlet 
    创徏XFire services.xml配置文g 
    在工E中的构\径中dMyEclipse-XFirecd 
    d一个指定的MyEclipse web project builder?projects文g,以便部vservices.xml文g到它合适的位置.? <webroot>/WEB-INF/classes/META-INF/xfire/ 

    q行W(xu)eb Service Project Wizard 
    该向导包括三个页? Page-1搜集Web Project配置l节, Page-2搜集XFire配置l节, Page-3在新建的构徏路径中配|XFirecd 
    1. 执行W(xu)eb Services Project Wizard. 
       1). 选择File>New>Other 
       2). 扩展MyEclipseU类按照J2EE工程的种c?br />       3). 选择Web Services Project然后点击Next,如图所C?br />


    Figure-1: New Project Wizard Launcher 
    2. dProject Name,点击Next


    Figure-2: Page-2, Collecting web configuration details 
    3.在向导的Page-2中添加XFire servlet和service.xml文g的配|信?按照默认的值即?


    Figure-3: XFire servlet and services.xml configuration
    4.在向导的Page-3中选择cdd到工E的构徏路径?其中XFire Core Library是需要的,如果要在工程中开发一个客L(fng)应用, XFire HTTP Client Libraries也是需要的.


    Figure-4: Selecting XFire libraries to add to new web service project buildpath 

    5选择Finish完成Web Service工程的创E?br />    Figure-5,昄了新创徏的HelloWorld Web Service工程的组l结?Web Service 工程和一个标准的MyEclipse Web工程很相? XFire Web Service配置元素如图U色区域昄:


    Figure-5: Web services artifacts of a new web service project 

    ? 创徏Web Service-Code-first Strategy 
    在这部分用MyEclipse Web Service Wizardq过使用Code-first Strategy来创Z个HelloWorldServiceCZ. 

    1. 执行MyEclipse Web Service Wizard,有两U方法来执行MyEclipse Web Service Wizard 
    Ҏ(gu)1.从MyEclipse perspective toolbar中来执行向导 
    在打开的Web Service Wizard上的workbench上来选择新Web Service按钮 
    Ҏ(gu)2.从workbench menubar执行向导 
    1. 从workbench menubar选择: File>New>Other>MyEclipse>Web Service


    Figure-6: Launching Web Service Wizard 

    2. 在Page-1选择HelloWorld 工程q择Create web service from Java bean 
    3. 选择Next到Page-2


    Figure-7: Page-1 of new web service wizard

    4. 填写Web Service的名字HelloWorldService 
    5. 选择Java Source folder或者选择New按钮来新Z个source folder 
    6. 填写Java package或者通过选择Browse按钮来选择一个已l存在的package.也可以选择New按钮来新Z个Java package 
    注意:对Service接口和Service执行的类的默认值是Z所填入Web Service名字来生的. 
    7. 选择Next来初始化Web Service的创E?br />


    Figure-8: Page-2 of new web service wizard. 
    该向g生了IHelloWorldService Java接口和HelloWorldServiceImpl Javac?q且在services.xml配置文g中创Z一?lt;service>实体(如图所C?,注意到example(String message)Ҏ(gu)在接口类中?当Web Service部v后作Z个测试操?


    Figure-9: Newly created HelloWorld interface and implementation class 

Web Service 服务端服务接口代?/strong>Q?br />
package org.stephencat.ws;
//Generated by MyEclipse

public interface ISampleService {
    
    
public String example(String message);
    
}

Web Service 服务端服务实C?/strong>Q?br />
package org.stephencat.ws;
//Generated by MyEclipse

public class SampleServiceImpl implements ISampleService {
    
    
public String example(String message) {
        
return message + " This is Xfire !!";
    }
    
}

    
    ? 部vWeb Service Project 
    Web Service可以部v在Q何MyEclipse支持的J2EE应用服务器上,该部分将演示如何在Tomcat 5 Web容器上部|HelloWorld工程. 

    3.1部vHelloWorld Web Service Project 

    Figure-10昄了如何部|HelloWorld应用. 
    1. 从Server Manager中选择Deployer按钮(step-1) 
    2. 在Server Deployments对话框中选择Add to create a new deployment (step-2) 
    3. 在New Deployment对话框中选择HelloWorld工程q择Exploded Archive选项 
    4. 在New Deployment对话框选择Finish来将HelloWorld在Tomcat 5默认的位|中打包为WAR 
    5. 选择OK完成部v


    Figure-10: Three-step deployment process 
    新HelloWorld WAR部v出现在Server Manager视图中Tomcat 5节点?


    Figure-11: Servers Manager View depicting deployed HelloWorld web service project

    ? 启动Tomcat服务器 (?JBoss 服务?/strong>Q?br />
    ? 使用Web Service Explorer试Web Service 
    MyEclipse提供了一个Web Service Explorer来测试Web Service. 
    1. 在MyEclipse perspective中选择toolbar button来执行W(xu)eb Service Explorer


    Figure-15: Web Services Explorer launch button on workbench toolbar 

    2. 选择WSDL模式(Figure-16) 
    3. 在活动面板中键入HelloWorldService WSDL文档的URL

http://localhost:8080/wstest/services/SampleService?WSDL

Web Service Explorer下载自动生的WSDL文档,该WSDL文档由XFire framework,q生一pd的操作能够调用service. 
    4. 在活动面板中选择example操作q在in0域中键入HelloWorld 
    5. 选择Go按钮来调用在HelloWorldService上的example操作,,l果出现在Status面板?


    Figure-16: Web Services Explorer testing HelloWorldService 

    ? 创徏Java Test客户?/strong> 
    XFire提供了一个动态的代理框架,能够dWSDL文档和创建潜在的消息服务使JavacL执行在Web Service的行?该部分将为HelloWorld Web Service写一个Java Web Service客户端?br />    6.1增加XFirecd配置 
    Z使example client能够在HelloWorld工程中运?需要增加XFire HTTP Clientcd到工E的构徏路径? 
    1. 在Package Explore视图中右击HelloWorld工程选择Build Path>Add Library 
    2. 选择MyEclipse Libraries 
    3. 选择XFire HTTP Client Libraries


    Figure-17: Choosing the XFire HTTP Client Libraries 
    4. 选择Finish 
    6.2创徏HelloWorldClientc?br />    执行Javacd导来创徏HelloWorldClientc?


    Figure-18: HelloWorldClient defined in New Java Class Wizard. 

    Web Service 客户端代?/strong>如下:

package org.stephencat.ws;

import org.codehaus.xfire.*;
import org.codehaus.xfire.service.*;
import org.codehaus.xfire.service.binding.*;
import org.codehaus.xfire.client.*;

import java.net.*;

public class SampleClient {

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        Service srvcModel 
= new
        ObjectServiceFactory().create(ISampleService.
class);
        XFireProxyFactory factory 
=
           
new XFireProxyFactory(XFireFactory.newInstance().getXFire());
        String url 
=
           
"http://localhost:8080/wstest/services/SampleService";
        
try {
            ISampleService srvc 
= (ISampleService)factory.create(srvcModel, url);
           String result 
= srvc.example("hello world");
           System.out.print(result);
        } 
catch (MalformedURLException e){
           e.printStackTrace();
        }


    }

}

    该段代码定义了创Z个XFire web service proxy的过E?该代理支持POJO IHelloWorldService接口 

    右键点击Run As>Java Application或者Debug As>JavaApplication来运行或调试该程?


飘雪 2007-10-24 15:11 发表评论
]]>
java相关文档下蝲地址http://m.tkk7.com/liyingcheng/archive/2007/09/26/148317.html飘雪飘雪Wed, 26 Sep 2007 06:07:00 GMThttp://m.tkk7.com/liyingcheng/archive/2007/09/26/148317.htmlhttp://m.tkk7.com/liyingcheng/comments/148317.htmlhttp://m.tkk7.com/liyingcheng/archive/2007/09/26/148317.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/148317.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/148317.html
http://hi.baidu.com/zbzb/blog/item/d71bfcedbd98464d79f055ba.html

jdk1.6帮助文档下蝲地址
http://gceclub.sun.com.cn/Java_Docs/jdk6/JDK_API_1_6_zh_CN.CHM

飘雪 2007-09-26 14:07 发表评论
]]>
eclipse插g安装的两个方?/title><link>http://m.tkk7.com/liyingcheng/archive/2007/08/31/141747.html</link><dc:creator>飘雪</dc:creator><author>飘雪</author><pubDate>Fri, 31 Aug 2007 07:42:00 GMT</pubDate><guid>http://m.tkk7.com/liyingcheng/archive/2007/08/31/141747.html</guid><wfw:comment>http://m.tkk7.com/liyingcheng/comments/141747.html</wfw:comment><comments>http://m.tkk7.com/liyingcheng/archive/2007/08/31/141747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/liyingcheng/comments/commentRss/141747.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/liyingcheng/services/trackbacks/141747.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://m.tkk7.com/liyingcheng/archive/2007/08/31/141747.html'>阅读全文</a><img src ="http://m.tkk7.com/liyingcheng/aggbug/141747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/liyingcheng/" target="_blank">飘雪</a> 2007-08-31 15:42 <a href="http://m.tkk7.com/liyingcheng/archive/2007/08/31/141747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swt学习(fn)Q{Q?/title><link>http://m.tkk7.com/liyingcheng/archive/2007/06/22/125811.html</link><dc:creator>飘雪</dc:creator><author>飘雪</author><pubDate>Fri, 22 Jun 2007 05:00:00 GMT</pubDate><guid>http://m.tkk7.com/liyingcheng/archive/2007/06/22/125811.html</guid><wfw:comment>http://m.tkk7.com/liyingcheng/comments/125811.html</wfw:comment><comments>http://m.tkk7.com/liyingcheng/archive/2007/06/22/125811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/liyingcheng/comments/commentRss/125811.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/liyingcheng/services/trackbacks/125811.html</trackback:ping><description><![CDATA[     摘要: swt入门介绍  <a href='http://m.tkk7.com/liyingcheng/archive/2007/06/22/125811.html'>阅读全文</a><img src ="http://m.tkk7.com/liyingcheng/aggbug/125811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/liyingcheng/" target="_blank">飘雪</a> 2007-06-22 13:00 <a href="http://m.tkk7.com/liyingcheng/archive/2007/06/22/125811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>udp?qing)tcpI越NAThttp://m.tkk7.com/liyingcheng/archive/2007/05/22/119169.html飘雪飘雪Tue, 22 May 2007 09:08:00 GMThttp://m.tkk7.com/liyingcheng/archive/2007/05/22/119169.htmlhttp://m.tkk7.com/liyingcheng/comments/119169.htmlhttp://m.tkk7.com/liyingcheng/archive/2007/05/22/119169.html#Feedback0http://m.tkk7.com/liyingcheng/comments/commentRss/119169.htmlhttp://m.tkk7.com/liyingcheng/services/trackbacks/119169.html阅读全文

飘雪 2007-05-22 17:08 发表评论
]]>
eclipse和java 反编译工具合?查看源代?/title><link>http://m.tkk7.com/liyingcheng/archive/2007/05/22/119167.html</link><dc:creator>飘雪</dc:creator><author>飘雪</author><pubDate>Tue, 22 May 2007 09:05:00 GMT</pubDate><guid>http://m.tkk7.com/liyingcheng/archive/2007/05/22/119167.html</guid><wfw:comment>http://m.tkk7.com/liyingcheng/comments/119167.html</wfw:comment><comments>http://m.tkk7.com/liyingcheng/archive/2007/05/22/119167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/liyingcheng/comments/commentRss/119167.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/liyingcheng/services/trackbacks/119167.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://m.tkk7.com/liyingcheng/archive/2007/05/22/119167.html'>阅读全文</a><img src ="http://m.tkk7.com/liyingcheng/aggbug/119167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/liyingcheng/" target="_blank">飘雪</a> 2007-05-22 17:05 <a href="http://m.tkk7.com/liyingcheng/archive/2007/05/22/119167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://aa2176.com" target="_blank">޾ƷĻ </a>| <a href="http://amgzh.com" target="_blank">ŮһһˬƵ</a>| <a href="http://kj555888.com" target="_blank">޼У԰ɫ</a>| <a href="http://asdfghjklzxcv.com" target="_blank">˳ۺ </a>| <a href="http://eeussdd.com" target="_blank">h߹ۿƵվ</a>| <a href="http://gycat.com" target="_blank">һ߹ۿ</a>| <a href="http://igdytt.com" target="_blank">츾avҹ벻</a>| <a href="http://wwwv27.com" target="_blank">Ļ߹ۿձ</a>| <a href="http://lzhuiding.com" target="_blank">þӰԺһ</a>| <a href="http://477077.com" target="_blank">ҰһƵ</a>| <a href="http://kj555888.com" target="_blank">ƷһʽӰ </a>| <a href="http://btintemet.com" target="_blank">޹߹ۿ</a>| <a href="http://chinacry.com" target="_blank">AVһ߹ۿ</a>| <a href="http://cin17.com" target="_blank">Ƭѿڵ</a>| <a href="http://902578.com" target="_blank">97Ƶ</a>| <a href="http://dnf1000.com" target="_blank">˾þAV</a>| <a href="http://onisterwines.com" target="_blank">þþþþþùѿ</a>| <a href="http://445848.com" target="_blank"></a>| <a href="http://dgyxcsb.com" target="_blank">ֳִִӲ3pƵ</a>| <a href="http://wenbye.com" target="_blank">С˵ɫͼ</a>| <a href="http://lswqn.com" target="_blank">Ʒavɫ</a>| <a href="http://pite2.com" target="_blank">av˾Ʒ </a>| <a href="http://jx-dirui.com" target="_blank">þó˹Ʒ</a>| <a href="http://044242.com" target="_blank">99߾ƷѲ6</a>| <a href="http://blzcn.com" target="_blank">þþþþAVվ </a>| <a href="http://jj5c.com" target="_blank">޹Ʒһһҳ</a>| <a href="http://010youhua.com" target="_blank">պƵ </a>| <a href="http://33uub.com" target="_blank">˳wwwӰҳ</a>| <a href="http://www-8812.com" target="_blank">޹ۺ</a>| <a href="http://www-33758.com" target="_blank">19ѹۿ</a>| <a href="http://hivzx.com" target="_blank">պƵ</a>| <a href="http://81am.com" target="_blank">һѹۿ</a>| <a href="http://cnlawedu.com" target="_blank">Ļ߲</a>| <a href="http://xian66.com" target="_blank">ᰡͣѿ</a>| <a href="http://612662.com" target="_blank">ڵƵ</a>| <a href="http://yinyinai155.com" target="_blank">ѿƬѲ</a>| <a href="http://41xjj.com" target="_blank">ѹ˸Ƶվ</a>| <a href="http://69xjj.com" target="_blank">AV֮պƷ</a>| <a href="http://jhmydxx.com" target="_blank">ҹľƷ </a>| <a href="http://yy12345.com" target="_blank">ձһ߲Ͷ</a>| <a href="http://c7372.com" target="_blank">avר߹ۿ </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>