<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風博客

    春天里,百花香...

    導航

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    #

    一個解析文本中的信息并向對象賦值過程的思考.

         摘要: 一個解析文本中的信息并向對象賦值過程的思考,比較淺顯.  閱讀全文

    posted @ 2007-12-07 16:35 sitinspring 閱讀(498) | 評論 (0)編輯 收藏

    私有的成員能被子類繼承嗎?

         摘要: private的成員變量能被子類繼承嗎?回答是父類的所有成員變量包括私有成員變量都會被子類繼承,private只是把可見性限制在改類內部的方法中而已,子類仍然可以通過父類的成員函數來訪問不可見的從父類繼承下來的私有成員.

    這個機制對于復雜的類體系中保護父類不被濫用很有好處.  閱讀全文

    posted @ 2007-12-04 20:42 sitinspring 閱讀(9959) | 評論 (7)編輯 收藏

    遍歷并批量刪除容器中元素出現ConcurrentModificationException原因及處置

         摘要: 本文分析了java.util.ConcurrentModificationException出現的原因及處置辦法.  閱讀全文

    posted @ 2007-12-03 21:04 sitinspring 閱讀(1884) | 評論 (2)編輯 收藏

    使用XML作為持久存儲介質的解決方案續

         摘要: 本文是"使XML作為持久存儲介質的解決方案 "的續文. 上文中對成員的CRUD都采用同步進行資源保護,這種方案實際上是保護過度,帶來的消極影響是降低了程序的效率,在下面的例子中,我們應該使用讀寫鎖對資源進行保護.關于讀寫鎖的分析請見"讀寫鎖的OO分析(http://m.tkk7.com/sitinspring/archive/2007/10/21/154652.html)". ...  閱讀全文

    posted @ 2007-11-15 10:22 sitinspring 閱讀(484) | 評論 (0)編輯 收藏

    在Weblogic8上注冊并啟動RMI程序.

    1.做兩個類Ruler和RulerImpl.
    import java.rmi.Remote;

    public interface Ruler extends Remote {
        
    public String getLength(String str) throws java.rmi.RemoteException;
    }

    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;

    import javax.naming.Context;
    import javax.naming.InitialContext;

    public class RulerImpl extends UnicastRemoteObject implements Ruler {
        
    public RulerImpl() throws RemoteException{
            
    super();
        }


        
    public String getLength(String str) throws java.rmi.RemoteException {
                     
    // 這里用Sb是因為weblogic的1.4的jdk不認StringBuilder
            StringBuffer sb=new StringBuffer();
            sb.append(
    "String:");
            sb.append(str);
            sb.append(
    "'s length=");
            sb.append(str.length());
            
            
    return sb.toString();
        }

        
        
    public static void main(String[] args){
            
    try{
                RulerImpl rulerImpl
    =new RulerImpl();
                
                Context ctx
    =new InitialContext();
                ctx.bind(
    "StringRuler", rulerImpl);
            }

            
    catch(Exception ex){
                ex.printStackTrace();
            }

        }

    }

    2.用rmic編譯Ruler.class和RulerImpl.class 以生成樁類RulerImpl_Stub.class.
    c:>C:\jdk1.5.0_09\bin\rmic RulerImpl.

    3.將生成的RulerImpl_Stub.class以及原有的Ruler.class和RulerImpl.class拷貝到服務器的目標域中,本人機器上的是C:\bea\user_projects\domains\mydomain

    4.通過http://localhost:7001/console 進入Weblogic控制臺,并按 yourdomain->Deployment->Startup&Shutdown->Configure a New Startup Class 注冊啟動類.完畢后結果如下圖:


    5.重新啟動Server(Start Server)

    6.通過客戶端測試一下:
    import java.util.Hashtable;

    import javax.naming.Context;
    import javax.naming.InitialContext;

    public class RulerClient{
        
    public static void main(String[] args) throws Exception{
            Hashtable env
    =new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "weblogic.jndi.WLInitialContextFactory");
            env.put(Context.PROVIDER_URL,
    "t3://localhost:7001");
            
            InitialContext ctx
    =new InitialContext(env);
            
            Object o
    =ctx.lookup("StringRuler");
            Ruler ruler
    =(Ruler)o;
            System.out.println(ruler.getLength(
    "123"));
        }

    }

    測試結果為:
    String:123's length=3

    代碼下載(rmic 目錄中包括三個已生成類):
    http://m.tkk7.com/Files/sitinspring/RmiExample20071106220750.rar

    posted @ 2007-11-06 22:22 sitinspring 閱讀(301) | 評論 (0)編輯 收藏

    限時線程回調方式的實現

    線程回調方式我們已經在"使用回調和線程處理一個耗時響應過程"文中進行了講述,但是有些情況下用戶希望在指定時間內返回一個結果,免得無休止的等待下去.這時我們需要使用"限時線程回調方式",它在原有線程回調的基礎上加上了一個Timer以計算消耗的時間,如果時間期限到了任務還沒有執行完的話即中斷線程,示例代碼如下:

    package com.sitinspring;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.Timer;

    /**
     * 定時回調線程類
     * 
     * 
    @author sitinspring(junglesong@gmail.com)
     * 
     * @date 2007-11-6
     
    */

    public class TimedCallBackThread implements Runnable {
        
    // 一秒的毫秒數常量
        private final static int ONE_SECOND = 1000;

        
    // 限制時間,以秒為單位
        private final int waitTime;

        
    // 已經流逝的時間
        private int passedTime;

        
    private Timer timer;

        
    private Thread thread;

        
    private MvcTcModel model;

        
    private MvcTcView view;

        
    public TimedCallBackThread(MvcTcModel model, MvcTcView view, int waitTime) {
            
    this.model = model;
            
    this.view = view;
            
    this.waitTime = waitTime;
            
    this.passedTime = 0;

            
    // 創建并啟動定時器
            timer = new Timer(ONE_SECOND, new ActionListener() {
                
    public void actionPerformed(ActionEvent evt) {
                    timeListener();
                }

            }
    );
            timer.start();

            
    // 創建并啟動線程來完成任務
            thread = new Thread(this);
            thread.start();
        }


        
    private void timeListener() {
            passedTime
    ++;

            
    // 動態顯示狀態
            int modSeed = passedTime % 3;
            
    if (modSeed == 0{
                view.getLabel2().setText(
    "響應中");
            }
     else if (modSeed == 1{
                view.getLabel2().setText(
    "響應中..");
            }
     else if (modSeed == 2{
                view.getLabel2().setText(
    "響應中.");
            }


            
    // 如果流逝時間大于規定時間則中斷線程
            if (passedTime > waitTime) {
                passedTime 
    = waitTime;
                thread.interrupt();
            }

        }


        
    public void run() {
            
    while (passedTime < waitTime) {
                
    try {
                    Thread.sleep(
    10000);// 模擬一個耗時相應過程
                    timer.stop();// 任務完成,停止Timer

                    view.getLabel2().setText(model.getText2());
                }
     catch (InterruptedException ex) {
                    timer.stop();
    // 線程中斷,停止Timer
                    view.getLabel2().setText("在指定時間內未響應");
                }
     catch (Exception ex) {
                    ex.printStackTrace();
                }


                
    return;
            }

        }

    }

    執行效果如下:





    本文代碼下載(點擊第二個按鈕):
    http://m.tkk7.com/Files/sitinspring/TimedThreadCallBack20071106194506.rar

    posted @ 2007-11-06 12:05 sitinspring 閱讀(1145) | 評論 (0)編輯 收藏

    MVC1,MVC2簡析

         摘要: 一般來說,可以把系統粗略的分為三個層次,視圖層,簡稱為View,它負責數據的輸出和輸入;業務層,簡稱為Model,它代表程序的實際業務;控制層,簡稱為Controller,處理界面的相應并調用業務層進行處理,有時把View和Controller兩層合稱為UI層。 在程序發展的歷史上,MVC模式進過了多次演化,MVC1和MVC2是兩種比較典型的模式,它們的區別主要在于View和Model的聯系方式...  閱讀全文

    posted @ 2007-11-05 20:15 sitinspring 閱讀(3922) | 評論 (1)編輯 收藏

    讀寫鎖的OO分析

         摘要: 我們有時會遇到對同一個內存區域如數組或者鏈表進行多線程讀寫的情況,一般來說有以下幾種處理方式:
    1.不加任何限制,多見于讀取寫入都很快的情況,但有時也會出現問題.
    2.對讀寫函數都加以同步鎖,比如使用singleton模式,這下問題是沒了,但效率也下去了,比如說兩個讀取線程不是非要排隊進入不可.
    3.讀寫鎖,安全和效率都得到了解決,特別合適讀線程多于寫線程的情況.也就是下面將要展現的模式.

    讀寫鎖的本意是分別對讀寫狀態進行互斥區分,有互斥時才加鎖,否則放行.互斥的情況有:
    1.讀寫互斥.
    2.寫寫互斥.
    不互斥的情況是:讀讀,這種情況不該加以限制.

    我們只要讓鎖對象知道當前讀寫狀態就可以了,再根據情況進行鎖定和解鎖,然后再分情況進行鎖定.請看代碼  閱讀全文

    posted @ 2007-10-21 11:42 sitinspring 閱讀(3286) | 評論 (2)編輯 收藏

    工人自動獲取任務的OO分析

         摘要: 這篇文章是"調度員,工人及任務的OO分析過程"的續篇.

    上次的情況是由調度員主動分配任務,但有些情況下需要工人自動取得任務而不是由調度員分配,這時需要對線程進行通知,使用的主要方法就是對象的wait(),notify(),notifyAll()三個函數,它們都必須從同步方法(synchronized method)中調用.  閱讀全文

    posted @ 2007-10-20 09:53 sitinspring 閱讀(878) | 評論 (0)編輯 收藏

    調度員,工人及任務的OO分析過程.

         摘要: 日常編碼中,我們常需要為各種業務進行建模,為工廠中的任務調度建模就很有意思的,它的主要流程是基本是這樣:
    1.調度員將工件圖紙交付給工人,這是任務的下達.
    2.工人工作,完成工件,這是任務的進行過程.
    3.工件完成后,工人將圖紙和工件返還給調度員,或者到了確定的時間后由調度員去取.這是任務的完成.
    4.重復上述三個步驟.

    在這個流程中,還存在一些特征:
    1.工人可以有多項任務,但他在一個時間只能做一個活,具體做那個由任務的優先級確定.
    2.任務完成后要讓調度員知道,現實中是工人來找調度員或者調度員找工人來實現的.

    從上述情況分析,我們需要任務,工人,調度員三個類來完成建模,另外為了方便任務的存儲和管理,還需要一個任務串類來輔助.
      閱讀全文

    posted @ 2007-10-05 12:52 sitinspring 閱讀(963) | 評論 (0)編輯 收藏

    僅列出標題
    共13頁: First 上一頁 5 6 7 8 9 10 11 12 13 下一頁 
    sitinspring(http://m.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 亚洲an日韩专区在线| 伊人久久综在合线亚洲2019| 666精品国产精品亚洲| 成人免费一区二区三区| 亚洲午夜日韩高清一区| 狠狠入ady亚洲精品| 免费无码A片一区二三区| 亚洲导航深夜福利| 午夜福利不卡片在线播放免费| 亚洲精品美女在线观看| 免费A级毛片无码无遮挡内射| 91亚洲精品自在在线观看| 国产一卡二卡四卡免费| 亚洲AV日韩综合一区尤物| 大陆一级毛片免费视频观看 | 99视频精品全部免费观看| 亚洲网站在线观看| 野花高清在线观看免费完整版中文| 亚洲三级视频在线观看| 日本一区免费电影| 免费人成视频在线播放| 亚洲中久无码永久在线观看同| 中国在线观看免费的www| 亚洲视频2020| 免费精品一区二区三区在线观看| 免费一级特黄特色大片| 亚洲区日韩区无码区| 久久狠狠躁免费观看| 亚洲国产精品综合久久网各| 日韩免费一区二区三区| 一级毛片aaaaaa视频免费看| 亚洲AV乱码久久精品蜜桃| 扒开双腿猛进入爽爽免费视频 | 亚洲综合无码一区二区三区| 毛片大全免费观看| 国产伦精品一区二区免费| 亚洲欧洲自拍拍偷综合| 国产又大又粗又硬又长免费| 黄色网站软件app在线观看免费| 亚洲日韩中文字幕| 亚洲无码黄色网址|