锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产av天堂亚洲国产av天堂,亚洲老熟女五十路老熟女bbw,狼人大香伊蕉国产WWW亚洲 http://www.tkk7.com/jelver/articles/329171.html鍐版渤蹇嫾鍐版渤蹇嫾Tue, 17 Aug 2010 23:59:00 GMThttp://www.tkk7.com/jelver/articles/329171.htmlhttp://www.tkk7.com/jelver/comments/329171.htmlhttp://www.tkk7.com/jelver/articles/329171.html#Feedback0http://www.tkk7.com/jelver/comments/commentRss/329171.htmlhttp://www.tkk7.com/jelver/services/trackbacks/329171.html 鍦ㄤ漢浜虹綉嫻烽噺瀛樺偍緋葷粺鐨勫瓨鍌ㄥ紩鎿庨儴鍒嗭紝涓轟簡鎻愰珮CPU鍜岀綉緇滅殑浣跨敤鎯呭喌錛屼嬌鐢ㄤ簡ja...  闃呰鍏ㄦ枃

鍐版渤蹇嫾 2010-08-18 07:59 鍙戣〃璇勮
]]>
java nio鍦ㄥ綰跨▼鐜闇娉ㄦ剰鐨勯棶棰?/title><link>http://www.tkk7.com/jelver/articles/322212.html</link><dc:creator>鍐版渤蹇嫾</dc:creator><author>鍐版渤蹇嫾</author><pubDate>Sat, 29 May 2010 07:53:00 GMT</pubDate><guid>http://www.tkk7.com/jelver/articles/322212.html</guid><wfw:comment>http://www.tkk7.com/jelver/comments/322212.html</wfw:comment><comments>http://www.tkk7.com/jelver/articles/322212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jelver/comments/commentRss/322212.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jelver/services/trackbacks/322212.html</trackback:ping><description><![CDATA[<p>鍘熷笘錛?a>http://www.tkk7.com/adapterofcoms/archive/2010/03/02/314242.html</a><br /> <br /> 鏈変漢璇磈ava nio鍦ㄥ綰跨▼鐜涓嬬紪紼嬬畝鐩村氨鏄釜鎭舵ⅵ,鍏跺疄浣犲鏋滆兘鎶婃彙浣廽ava nio API鐨勮棰?浣犲氨鍙互灝嗕箣椹鵑┉. </p> <p>0. 涓涓?channal 瀵瑰簲涓涓猄electionKey in the same selector.<br /> e.g: <br /> SelectionKey sk=sc.register(selector, SelectionKey.OP_READ, handler);<br /> sk==sc.register(selector, SelectionKey.OP_WRITE, handler) true?<br /> selector.select() 姣忔榪斿洖鐨勫鍚屼竴channal鐨剆k鏄惁鐩稿悓? </p> <p>1.channel.register(...) may <strong>block</strong> if invoked concurrently with another registration[another.register(...)] or selection operation[selector.select(...)] involving *****<strong>the same selector</strong>*****.<br /> 榪欎釜鏄痳egister鏂規硶jdk src涓婄殑鍘熸枃,<br /> e.g:<br /> 濡傛灉涓涓猻election thread宸茬粡鍦╯elect鏂規硶涓婄瓑寰卛ng,閭d箞榪欎釜鏃跺欏鏋滄湁鍙︿竴鏉$嚎紼嬭皟鐢╟hannal.register鏂規硶鐨勮瘽,閭d箞瀹冨皢琚玝locking.<br /> <br /> 2.selectionKey.cancel() : The key will be <strong>removed</strong> from all of the selector's key sets <strong>during</strong> *****<strong>the next selection operation[selector.select(...)]</strong>*****.<br /> may <strong>block</strong> briefly if invoked concurrently with a cancellation[cancel()] or selection operation[select(...)] involving ***<strong>the same selector</strong>***.<br /> 榪欎釜涔熸槸cancel鏂規硶jdk src涓婄殑鍘熸枃,<br /> e.g:<br /> 浣犲厛灝嗕竴涓猻electionKey.cancel(),鐒跺悗闅忓嵆鍐峜hannel.register to <strong>the same selector</strong>,<br /> 鍦╟ancel鍜宺egister涔嬮棿,濡傛灉娌℃湁綰跨▼(鍖呮嫭褰撳墠綰跨▼)榪涜select鎿嶄綔鐨勮瘽,<br /> 閭d箞 throws java.nio.channels.CancelledKeyException.<br /> 鎵浠?nbsp;cancel-->select-->re-register.  </p> <p>3.if <strong>don't remove</strong> the current selectedKey from selector.selectedKeys()[Set] 灝嗗鑷?selector.select(...) <strong>not</strong> <strong>block</strong> [may be cpu 100%,specially when client cut the current channel(connection)].<br /> e.g:<br /> Iterator<SelectionKey> it=selector.selectedKeys().iterator();<br /> ...for/while it.hasNext()...<br /> it.remove();<strong><------*****must do it. or Keys' Set.clear() finally;</strong> </p> <p>if remove the current selectedKey from selector.selectedKeys()[Set] <strong>but don't</strong> <strong>sk.interestOps(sk.interestOps()& (~sk.readyOps()))</strong>;灝嗗鑷?selector.select(...) <strong>not block</strong> [select() not block several times, or excepted exception] </p> <p>4.op_write should not be registered to the selector.   [may be cpu100%] </p> <p>5. if involving  wakeup() <strong>before</strong> select() [wakeup called several times >=1],the <strong>next</strong> select() <strong>not block</strong> [not block just once]. </p> <p>灝界浠ュ墠鏈変簺浜哄垎鏋愪簡nio鐨剋akeup鎬ц兘鍙妌ot block in linux鐨刡ug,浣嗘槸java nio渚濈劧鏄珮鏁堢殑,閭d簺c/c++鐨勭墰浜轟滑鍘葷湅鐪媕re/bin鐩綍涓嬬殑nio.dll/nio.so鍚?java nio鏄熀浜巗elect妯″瀷(榪欎釜鏄痗/c++涓父鐢ㄧ綉緇滅紪紼嬫ā鍨嬩箣涓)鐨?</p> <p>鍩轟簬java nio鐨勬湇鍔″櫒:mina,girzzly[glassfish],jetty(鍩轟簬girzzly),tomcat6[鍙互閰嶇疆Http11NioProtocol]...</p> <p>鍏朵腑浠庢湰浜哄girzzly,tomcat6鐨勬簮鐮佸垎鏋愭潵鐪?瀹冧滑閮借繕娌℃湁鐪熸鍙戞尌鍑簄io寮傛澶勭悊璇鋒眰鐨勪紭鐐?瀹冧滑鐨勮鍐欒繕閮芥槸blocking鐨勮櫧鐒朵嬌鐢ㄤ簡selectorPool,姝ゅtomcat6瑕佸墺紱誨嚭socket閫氫俊榪樿鑺辮垂涓瀹氱殑鍔熷か.鑰?strong>mina</strong>鍗存槸<strong>鍚?font class="" style="font-family: " color="#ff0000">涓?/font>絎﹀叾瀹?/strong>,榪樻湁<strong>bug</strong>鍝?</p> <p><br />  </p> <img src ="http://www.tkk7.com/jelver/aggbug/322212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jelver/" target="_blank">鍐版渤蹇嫾</a> 2010-05-29 15:53 <a href="http://www.tkk7.com/jelver/articles/322212.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢∟IO瀹炵幇鐨勪竴涓狢hat Demo [杞琞http://www.tkk7.com/jelver/articles/322201.html鍐版渤蹇嫾鍐版渤蹇嫾Sat, 29 May 2010 04:38:00 GMThttp://www.tkk7.com/jelver/articles/322201.htmlhttp://www.tkk7.com/jelver/comments/322201.htmlhttp://www.tkk7.com/jelver/articles/322201.html#Feedback0http://www.tkk7.com/jelver/comments/commentRss/322201.htmlhttp://www.tkk7.com/jelver/services/trackbacks/322201.html鍙戠幇緗戜笂鎵懼埌鐨勮澶歂IO鐨勭敤渚嬪湪璺戣搗鏉ュ悗閮芥湁璁稿闂錛屾渶甯歌鐨勫氨鏄病鏈夊interest event榪涜鍚堢悊鐨剅egistry鍜寀nregistry錛屽鑷寸▼搴忎竴鐩村湪loopling錛屽張鎴栬呭綋瀹㈡埛绔垨鏈嶅姟鍣ㄧ榪炴帴鏂紑鏃舵湁姝誨驚鐜殑榪硅薄銆傚繊涓嶄綇鑷繁鍋氫簡涓涓猟emo錛屾垜鎯沖彲浠ヤ綔涓轟竴涓狽IO搴旂敤鐨勬ā鏉垮幓淇敼錛屽彧瑕佹妸doRead錛宒oWrite涔嬬被鐨勭敤鍩轟簬綰跨▼鐨凥andler鍘誨鐞嗭紝閭e氨鍩烘湰鍙互婊¤凍闇姹備簡銆?br /> 榪欎釜Demo鐨勭洰鐨勬槸鍦–lient鍜孲erver闂村緩绔嬬被浼糛Q鑱婂ぉ閭f牱鐨勫姛鑳斤紝璁╁鎴風鍜屾湇鍔″櫒绔兘鏀寔鐢ㄦ埛杈撳叆鍜屽紓姝ユ秷鎭樉紺猴紙鍥犱負鏈嶅姟鍣ㄧ瑕佹敮鎸佺敤鎴風殑console杈撳叆錛屾墍浠ヤ笉瑕佺敤澶氫釜瀹㈡埛绔繘琛岃繛鎺ワ紝鍚﹀垯鍙兘浼氬嚭鐜伴毦浠ラ嫻嬬殑闂錛夈?br /> 浠g爜涓敤綰㈣壊鏄劇ず鐨勫湴鏂規槸鎴戣涓洪渶瑕佹敞鎰忕殑鍦版柟錛岃鑰佸疄璇漀IO铏界劧寰堝己澶э紝浣嗗畬鍏ㄧ敤Non-Blocking鏉ョ紪紼嬶紝鏈夎澶氶渶瑕佸皬蹇冪殑鍦版柟錛屼竴涓嶅皬蹇冭繕鍙兘閫犳垚姝誨驚鐜傚氨鍍廟eentrantLock涔嬩簬Synchronized錛屽鏋滃熀鏈殑IO鑳芥弧瓚抽渶姹傦紝灝變笉蹇呭己姹傚簲鐢∟IO銆?br /> 娉ㄦ剰錛歄P_WRITE搴旇鏄湪鍐欏叆鍑嗗灝辯華鐨勬椂鍊欐墠娣誨姞鍒癝electionKey閲岄潰鍘伙紝鑰屼笖鍦ㄥ啓鍏ュ畬鎴愬悗涓瀹氳鍘婚櫎錛屽惁鍒檚elector.select()鏂規硶灝變笉浼氳blocking鑰岄犳垚姝誨驚鐜?br />
MyNioServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;

public class MyNioServer {

    private int BUFFERSIZE = 1024*10;
    private String CHARSET = "GBK";
    private Selector sel;

    public MyNioServer(int port) throws IOException {
        ServerSocketChannel ssc = ServerSocketChannel.open();
        ssc.configureBlocking(false);
        ssc.socket().bind(
                new InetSocketAddress(InetAddress.getLocalHost(), port));
        sel = Selector.open();
        ssc.register(sel, SelectionKey.OP_ACCEPT);
    }

    public void startup() {
        System.out.println("Server start...");
        try {
            while (!Thread.interrupted()) {
                int keysCount = sel.select();
                System.out.println("Catched " + keysCount + " SelectionKeys");
                if (keysCount < 1) {
                    continue;
                }
                Set<SelectionKey> set = sel.selectedKeys();
                Iterator<SelectionKey> it = set.iterator();
                while (it.hasNext()) {
                    SelectionKey key = it.next();
                    if (key.isAcceptable()) {
                        System.out.println("Key isAcceptable");
                        doAccept(key);
                    }
                    if (key.isValid() && key.isReadable()) {
                        System.out.println("Key isReadable");
                        doRead(key);
                    }
                    if (key.isValid() && key.isWritable()) {
                        System.out.println("Key isWritable");
                        doWrite(key);
                    }
                }
                set.clear();
            }
            System.err.println("Program is interrupted.");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Server stop...");
        shutdown();
    }
   
    public void shutdown(){
        Set<SelectionKey> keys = sel.keys();
        for(SelectionKey key:keys){
            try {
                key.channel().close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            sel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void doAccept(SelectionKey key) {
        try {
            SocketChannel sc = ((ServerSocketChannel) key.channel()).accept();
            sc.configureBlocking(false);
            SelectionKey newkey = sc.register(sel, SelectionKey.OP_READ);
            newkey.attach(new LinkedList<ByteBuffer>());
            new Thread(new UserInteractive(newkey)).start();
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("Failed to accept new client.");
        }
        System.out.println("end doAccept");
    }

    // TODO buffersize performance testing
    private void doRead(SelectionKey key) {
        try {
            SocketChannel sc = (SocketChannel) key.channel();
            ByteBuffer bb = ByteBuffer.allocate(BUFFERSIZE);
            StringBuffer sb = new StringBuffer();
            int count = 0;
            while ( (count = sc.read(bb)) > 0) {
                bb.flip();
                sb.append(Charset.forName(CHARSET).decode(bb));
                bb.flip();
            }
            //if client disconnected, read return -1
            if(count == -1){
                System.out.println("client disconnected");
                disconnect(key);   
            } else {
                System.out.println("message received from client:" + sb.toString());
            }
        } catch (IOException e) {
            disconnect(key);
            e.printStackTrace();
        }
        System.out.println("end doRead");
    }

    private void doWrite(SelectionKey key) {
        SocketChannel sc = (SocketChannel) key.channel();
        LinkedList<ByteBuffer> outseq = (LinkedList<ByteBuffer>) key
                .attachment();
        ByteBuffer bb = outseq.poll();
        if(bb == null){
            return;
        }
        try {
            while(bb.hasRemaining()){
                sc.write(bb);
            }           
        } catch (IOException e) {
            disconnect(key);
            e.printStackTrace();
        }
        if (outseq.size() == 0) {
            System.out.println("after all buffers wrote, unregister OP_WRITE from interestOps");
            key.interestOps(SelectionKey.OP_READ);
        }
        System.out.println("end doWrote");
    }

    private void disconnect(SelectionKey key) {
        try {
            key.channel().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //TODO find out how to shutdown
    private class UserInteractive implements Runnable {

        SelectionKey key;

        public UserInteractive(SelectionKey key) {
            this.key = key;
        }

        public void run() {
            System.out.println("UserInteractive thread start...");
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    System.in));
            while (true) {
                try {
                    String inputLine = br.readLine();
                    ByteBuffer bb = ByteBuffer.allocate(BUFFERSIZE);
                    bb = ByteBuffer.wrap(inputLine.getBytes());
                    ((LinkedList<ByteBuffer>) key.attachment()).offer(bb);
                    System.out
                            .println("after input, register OP_WRITE to interestOps and wakeup selector");
                    key.interestOps(SelectionKey.OP_READ | SelectionKey.OP_WRITE);
                    key.selector().wakeup();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            MyNioServer server = new MyNioServer(10001);
            server.startup();
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Exception caught, program exiting…");
        }
    }
}


MyNioClient.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.nio.channels.SelectionKey;
import java.text.MessageFormat;
import java.util.LinkedList;
import java.util.Set;
import java.util.Iterator;

public class MyNioClient {

    private int BUFFERSIZE = 1024*10;
    private String CHARSET = "GBK";
    private Selector sel;

    public MyNioClient(int port) throws IOException {
        SocketChannel sc = SocketChannel.open();
        sc.configureBlocking(false);    // this operation need to be executed before socket.connnect, for OP_CONNECT event
        sc.connect(new InetSocketAddress(InetAddress.getLocalHost(), port));
        sel = Selector.open();
        sc.register(sel, SelectionKey.OP_CONNECT |SelectionKey.OP_READ);
    }

    public void startup() {
        System.out.println("Client start...");
        try {
            while (!Thread.interrupted()) {
                int keysCount = sel.select();
                System.out.println("Catched " + keysCount + " SelectionKeys");
                if (keysCount < 1) {
                    continue;
                }               
                Set<SelectionKey> selectedKeys = sel.selectedKeys();
                Iterator<SelectionKey> it = selectedKeys.iterator();
                while (it.hasNext()) {
                    SelectionKey key = it.next();
                    //printKeyInfo(key);
                    if (key.isConnectable()) {
                        System.out.println("Key isConnectable");
                        doConnect(key);
                    } else if (key.isValid() && key.isReadable()) {
                        System.out.println("Key isReadable");
                        doRead(key);
                    } else if (key.isValid() && key.isWritable()) {
                        System.out.println("Key isWritable");
                        doWrite(key);
                    }
                }
                selectedKeys.clear();
            }
            System.err.println("Program is interrupted.");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Client stop...");
        shutdown();
    }
   
    public void shutdown(){
        Set<SelectionKey> keys = sel.keys();
        for(SelectionKey key:keys){
            try {
                key.channel().close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            sel.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void printKeyInfo(SelectionKey key) {
        String keyStr = MessageFormat
                .format(
                        "IntOps:{0},ReadyOps:{1},isVal:{2},isAcc:{3},isCnn:{4},isRead:{5},isWrite:{6}",
                        key.interestOps(), key.readyOps(), key.isValid(), key
                                .isAcceptable(), key.isConnectable(), key
                                .isReadable(), key.isWritable());
        System.out.println(keyStr);
    }

    private void doConnect(SelectionKey key) {
        try {
            boolean flag = ((SocketChannel) key.channel()).finishConnect();
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
        System.out.println("unregister OP_CONNECT from interestOps");
        key.interestOps(SelectionKey.OP_READ);
        key.attach(new LinkedList<ByteBuffer>());
        new Thread(new UserInteractive(key)).start();
    }

    private void doRead(SelectionKey key) {
        try {
            SocketChannel sc = (SocketChannel) key.channel();
            ByteBuffer bb = ByteBuffer.allocate(BUFFERSIZE);
            StringBuffer sb = new StringBuffer();
            while (sc.read(bb) > 0) {
                bb.flip();
                sb.append(Charset.forName(CHARSET).decode(bb));
                bb.flip();
            }
            System.out.println("message received from server:" + sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
            disconnect(key);
            System.exit(1);
        }
        System.out.println("now end readMessage");
    }

    private void doWrite(SelectionKey key) {
        SocketChannel sc = (SocketChannel) key.channel();
        LinkedList<ByteBuffer> outseq = (LinkedList<ByteBuffer>) key
                .attachment();
        ByteBuffer bb = outseq.poll();
        if(bb == null){
            return;
        }
        try {
            while(bb.hasRemaining()){
                sc.write(bb);
            }           
        } catch (IOException e) {
            disconnect(key);
            e.printStackTrace();
        }
        if (outseq.size() == 0) {
            System.out.println("after all buffers wrote, unregister OP_WRITE from interestOps");
            key.interestOps(SelectionKey.OP_READ);
        }
        System.out.println("end doWrote");
    }

    private void disconnect(SelectionKey key) {
        try {
            key.channel().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private class UserInteractive implements Runnable {

        SelectionKey key;

        public UserInteractive(SelectionKey key) {
            this.key = key;
        }

        public void run() {
            LinkedList<ByteBuffer> outseq = (LinkedList<ByteBuffer>) key
                    .attachment();
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            while (true) {
                try {
                    String inputLine = br.readLine();
                    if ("quit".equalsIgnoreCase(inputLine)) {
                        key.channel().close();
                        System.exit(1);
                        break;
                    }
                    ByteBuffer bb = ByteBuffer.allocate(BUFFERSIZE);
                    bb = ByteBuffer.wrap(inputLine.getBytes());
                    outseq.offer(bb);
                    System.out
                    .println("after input, register OP_WRITE to interestOps and wakeup selector");
                    key.interestOps(SelectionKey.OP_READ
                            | SelectionKey.OP_WRITE);
                    sel.wakeup();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            MyNioClient client = new MyNioClient(10001);
            client.startup();
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Exception caught, program exiting...");
        }
    }

}



鍐版渤蹇嫾 2010-05-29 12:38 鍙戣〃璇勮
]]>
Java Socket緗戠粶緙栫▼鐨勭粡鍏鎬緥瀛?杞?http://www.tkk7.com/jelver/articles/280175.html鍐版渤蹇嫾鍐版渤蹇嫾Fri, 05 Jun 2009 03:19:00 GMThttp://www.tkk7.com/jelver/articles/280175.htmlhttp://www.tkk7.com/jelver/comments/280175.htmlhttp://www.tkk7.com/jelver/articles/280175.html#Feedback0http://www.tkk7.com/jelver/comments/commentRss/280175.htmlhttp://www.tkk7.com/jelver/services/trackbacks/280175.html闃呰鍏ㄦ枃

鍐版渤蹇嫾 2009-06-05 11:19 鍙戣〃璇勮
]]>
Scalable io in java 杞?/title><link>http://www.tkk7.com/jelver/articles/254389.html</link><dc:creator>鍐版渤蹇嫾</dc:creator><author>鍐版渤蹇嫾</author><pubDate>Thu, 12 Feb 2009 06:35:00 GMT</pubDate><guid>http://www.tkk7.com/jelver/articles/254389.html</guid><wfw:comment>http://www.tkk7.com/jelver/comments/254389.html</wfw:comment><comments>http://www.tkk7.com/jelver/articles/254389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jelver/comments/commentRss/254389.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jelver/services/trackbacks/254389.html</trackback:ping><description><![CDATA[     鎽樿: 鍘熸枃http://blog.csdn.net/liu251/archive/2008/07/06/2618752.aspx 鏈枃鍙湅鎴愭槸瀵笵oug Lea Scalable IO in Java涓鏂囩殑緲昏瘧銆?褰撳墠鍒嗗竷寮忚綆椼Web Services鐩涜澶╀笅錛岃繖浜涚綉緇滄湇鍔$殑搴曞眰閮界涓嶅紑瀵箂ocket鐨勬搷浣溿備粬浠兘鏈変竴涓叡鍚岀殑緇撴瀯錛?1. Read request 2. Decode reques...  <a href='http://www.tkk7.com/jelver/articles/254389.html'>闃呰鍏ㄦ枃</a><img src ="http://www.tkk7.com/jelver/aggbug/254389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jelver/" target="_blank">鍐版渤蹇嫾</a> 2009-02-12 14:35 <a href="http://www.tkk7.com/jelver/articles/254389.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>緗戠粶鍦ㄧ嚎娓告垙寮鍙戝績寰?鏈嶅姟鍣ㄧ) 杞創http://www.tkk7.com/jelver/articles/239470.html鍐版渤蹇嫾鍐版渤蹇嫾Sat, 08 Nov 2008 15:14:00 GMThttp://www.tkk7.com/jelver/articles/239470.htmlhttp://www.tkk7.com/jelver/comments/239470.htmlhttp://www.tkk7.com/jelver/articles/239470.html#Feedback0http://www.tkk7.com/jelver/comments/commentRss/239470.htmlhttp://www.tkk7.com/jelver/services/trackbacks/239470.html涓涓浜哄湪綰跨殑媯嬬墝綾?a target="_blank">緗戠粶娓告垙鐨勯」鐩復榪戝熬澹幫紝鎴戝弬涓庝簡璇ラ」鐩殑鏁翠釜璁捐嫻佺▼錛屽茍涓斿畬鎴愪簡90%鐨勬牳蹇冧唬鐮併傚叧浜庤繖涓」鐩紝鏈夊緢澶氬湴鏂瑰煎緱鑱婁竴鑱娿傛湰緋誨垪涓嶆墦綆楁妸榪欎釜欏圭洰灝嗗緱澶氫箞璇︾粏瑙勮寖錛岄偅鏄璁℃枃妗e簲璇ユ弿榪扮殑錛屾垜鎵撶畻鍙璇翠竴浜涘煎緱娉ㄦ剰鐨勫湴鏂廣傝繖涓」鐩殑涓涓壒鍒箣澶勬槸錛屽鎴風鏄?a target="_blank">鎵嬫満錛岀敤鎴烽氳繃縐誨姩緗戠粶涓?a target="_blank">鏈嶅姟鍣?/a>閫氫俊銆傚拰PC鐩告瘮錛屾墜鏈虹殑澶勭悊鑳藉姏鏋佸急錛岃屼笖緗戠粶嫻侀噺璐圭敤鏄傝吹銆傚洜涓洪櫎浜嗚鑰冭檻鏅?a target="_blank">緗戠粶娓告垙鐨勪竴浜涢棶棰樹箣澶栵紝榪欎袱鐐逛篃闇瑕佸湪璁捐涓厖鍒嗚冭檻銆傞鍏堟槸寮鍙戣璦鐨勯夋嫨錛岀敱浜庢湇鍔″櫒鏄?a target="_blank">Linux鐨勭幆澧冿紝MS鐨勬妧鏈洿鎺ユ帓闄わ紝鑷充簬MONO鍢涳紝鎴戝疄鍦ㄤ笉鏀懼績銆傚彲渚涢夋嫨鐨勬槸C++鍜?a target="_blank">Java錛孞ava鑳滃湪緗戠粶鑳藉姏寮哄ぇ錛屽紑鍙戝懆鏈熺煭錛屾湁浼楀妗嗘灦鍜屽紑婧愬簱鐨勬敮鎸侊紝瑕佸啓鍑虹儌寰椾笉鍙帴鍙楃殑浠g爜涔熶笉瀹規槗錛汣++鍒欒儨鍦ㄩ熷害蹇傜患鍚堝悇鏂歸潰鍥犵礌錛孋++鏇村鏄撴妸榪欎釜欏圭洰鍙樻垚涓鍫嗕唬鐮佸櫓姊︼紝鎴戜滑閫夋嫨浜咼ava銆?/span>

涓銆?span style="font: 7pt 'Times New Roman'">             緗戠粶

緗戠粶娓告垙錛岄鍏堥潰涓寸殑闂褰撶劧鏄浣曡繘琛岀綉緇滈氫俊銆傞鍏堣冭檻鐨勬槸HTTP鍗忚錛屽洜涓烘墍鏈夌殑J2ME鎵嬫満閮芥敮鎸佽繖涓紝鎴戜滑褰撶劧鎯沖敖鍙兘鐨勫吋瀹圭敤鎴楓傝屼笖HTTP鍗忚灝佽紼嬪害宸茬粡闈炲父楂樹簡錛屼笉鐢ㄥ幓鑰冭檻綰跨▼銆佸悓姝ャ佺姸鎬佺鐞嗐佽繛鎺ユ睜錛屼笉榪嘓TTP鍗忚鏈変袱涓笉鐖界殑鍦版柟錛?/span>

鈼?nbsp;鍗忚鏃犵姸鎬侊紝榪欎釜闂宸茬粡鍥版壈榪囧緢澶氫漢寰堝嬈′簡銆傛垜鏇捐冭檻榪囩殑瑙e喅鍔炴硶鏄敼閫燞TTP鍗忚錛屽湪鏁版嵁浼犺緭瀹屾垚涔嬪悗涓嶅叧闂璼ocket錛屼絾鏄繖鏍峰仛宸ヤ綔閲忛潪甯稿ぇ錛屽湪欏圭洰鍛ㄦ湡涓紝鍩烘湰涓婂氨鏄疢ission impossible錛屼笉浜堣冭檻銆傞偅涔堝鎴蜂篃灝卞彧鑳介氳繃杞鐨勬柟寮忓悜鏈嶅姟鍣ㄨ姹傛暟鎹?/span>

鈼?nbsp;緗戠粶嫻侀噺榪囧ぇ銆傚氨榪欎釜欏圭洰鏉ヨ錛岀綉緇滈棿浼犻掔殑鍙槸鎸囦護錛屼絾鏄瘡嬈′紶閫掗兘瑕佸姞涓婁竴鍫嗘鏃犵敤澶勭殑HTTP Head錛屽啀鍔犱笂瀹㈡埛绔渶瑕佸仛杞錛岃繖涓祦閲忓浜庢墜鏈烘潵璇寸畝鐩存亹鎬栵紝緇忕畝鍗曟祴璇曪紝鎸夌収0.03鍏?K鐨凣PRS緗戠粶璐圭敤璁$畻錛屼竴灞鐗屽眳鐒惰娑堣?鍏冨鐨勮垂鐢紙姣忕杞錛夛紝瀹炲湪涓嶅彲鎺ュ彈銆備篃璁告垜浠彲浠ラ噰鐢ㄦ祦閲忚垂鍖呮湀鐨勮祫璐規柟寮忥紝涓嶈繃榪欎釜璇濋涓庢妧鏈棤鍏熾?/span>

浠ヤ笂闂瀵艱嚧鎴戜滑閫夋嫨浜哠ocket錛岃繖鎰忓懗鐫鎴戜滑灝嗘病鏈変竴涓?a target="_blank">Web鐜錛屽緢澶氫笢瑗塊兘瑕侀潬鑷繁鍘誨疄鐜幫細綰跨▼綆$悊銆佸鎴風姸鎬佺洃鎺с佸璞℃睜銆佹帶鍒跺彴……….緗戠粶閮ㄥ垎鎵撶畻閲囩敤Java NIO鏉ュ疄鐜幫紝榪欐槸涓縐嶆柊鐨勭綉緇滅洃鍚柟寮忥紝鍩轟簬浜嬩歡鐨勫紓姝ラ氫俊錛屽彲浠ユ彁楂?nobr oncontextmenu="return false" onmousemove="kwM(0)" id="clickeyekey0" onmouseover="kwE(event,0, this)" style="background: url(http://control.clickeye.com.cn/images/line5.gif) repeat-x 50% bottom; padding-bottom: 2px; color: #6600ff" onclick="kwC(event,0)" onmouseout="kwL(event,this)">鎬ц兘銆傛瘡涓鎴風榪炴帴涔嬪悗錛屼細鏈変竴涓嫭绔嬬殑SocketChannel涓庡畠閫氫俊錛岃繖涓猄ocketChannel浼氬湪鐢ㄦ埛鐨勬暣涓敓瀛樺懆鏈熶腑瀛樺湪銆傜敤鎴峰鏋滄柇寮榪炴帴錛屾湇鍔″櫒浼氬緱鍒?1錛屽茍涓斾細鎶涘嚭Connection reset寮傚父錛岄氳繃鎹曡幏榪欎袱涓壒寰侊紝鍙互鍦ㄧ敤鎴鋒剰澶栨柇寮榪炴帴鍚庢竻鐞嗙浉鍏崇殑璧勬簮銆傜敱浜嶯IO鏄紓姝ラ氫俊鐨勶紝鎵浠ユ病鏈夊鏉傜殑綰跨▼綆$悊銆?/span>

浜屻?span style="font: 7pt 'Times New Roman'">             閫氫俊鍗忚

榪欎釜欏圭洰騫舵病鏈夊鏉傜殑閫氫俊鎸囦護錛屽懡浠ゆ暟閲忓緢鏈夐檺錛屼絾鏄繕鏄湁涓叧閿棶棰橀渶瑕佸叧娉細嫻侀噺銆備負浜嗗敖閲忓噺灝忔祦閲忥紝鎴戜滑浣跨敤瀛楄妭浠f浛瀛楃涓叉潵淇濆瓨緋葷粺鎸囦護錛岃繖鏍峰彲浠ヤ嬌嫻侀噺鍑忓皯涓鍗婏紝姣斿浣跨敤涓涓瓧鑺傛潵淇濆瓨涓寮犳墤鍏嬬墝錛屽瓧鑺傞珮浣嶈〃紺鴻姳鑹詫紝瀛楄妭浣庝綅琛ㄧず鏁板瓧錛屽鏋?浠h〃榛戞錛岄偅涔堥粦妗冧笁灝卞簲璇ユ槸0x03錛岃繖涓渶瑕侀潬浣嶆搷浣滄潵瀹炵幇錛?/span>

int m=0;

    int n=3;

    byte card=(byte)(m)<<4)|((byte)n;       //m宸︾Щ鍥涗綅錛岀劧鍚庝笌n宸︽垨鎿嶄綔

娓告垙涓渶瑕佷紶閫掔敤鎴風殑縐垎錛岃繖鏄竴涓ぇ鏁存暟錛屼嬌鐢ㄥ洓涓瓧鑺傛潵淇濆瓨姣旇緝淇濋櫓錛屽皢鏁存暟杞崲涓哄洓涓瓧鑺傜殑鎿嶄綔濡備笅錛?/span>

 

public static byte[] translateLong(long mark){
    
byte[] b = new byte[4];
    
for (int i = 0; i < 4; i++){
        b[i] 
= (byte) (mark >>> (24 - i * 8));
    }

    
return b;
}

 

灝嗗洓涓瓧鑺傝漿鍥炴潵鐨勬搷浣滃涓嬶細

 

public static long translateByte(byte[] b){
    
int mask = 0xff;
    
int temp = 0;
    
int res = 0;

    
for (int i = 0; i < 4; i++{
        res 
<<= 8;

        temp 
= b[i] & mask;

        res 
|= temp;
    }

    
return res;
}

 

涓夈?span style="font: 7pt 'Times New Roman'">             鏁版嵁搴?/a>榪炴帴姹?/span>

鐢變簬娌℃湁涓涓獁eb鐜錛屾墍浠ユ垜浠渶瑕佽嚜宸卞疄鐜頒竴涓暟鎹簱榪炴帴姹狅紝apache鏈変竴涓」鐩彨鍋歝ommons DBCP錛岃繖鏄竴涓熀浜巃pache鑷繁鐨勫璞℃睜錛坅pache commons pool錛夊疄鐜扮殑鏁版嵁搴撹繛鎺ユ睜錛屾垜浠彲浠ョ洿鎺ユ嬁鏉ヤ嬌鐢紝apache鐨勮蔣浠舵湭蹇呮槸鏈濂界殑錛屼絾鏄瀬澶у彲鑳芥瘮鎴戜滑鑷繁鍐欑殑瑕佸ソ銆侰ommons DBCP闇瑕佷笁涓?jar錛歝ommons-collections-3.1.jar銆乧ommons-dbcp-1.2.1.jar銆乧ommons-pool-1.2.jar榪欎笁涓枃浠墮兘鍙互鍦╝pache – Jakarta – commons欏圭洰涓?a target="_blank">涓嬭澆錛屽姞鍏ュ埌宸ョ▼涓嵆鍙傛瀯閫犱竴涓暟鎹簱榪炴帴姹犵殑浠g爜濡備笅錛?/span>

 

import java.sql.*;

import com.gwnet.games.antiLord.util.*;

import org.apache.commons.dbcp.ConnectionFactory;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbcp.DataSourceConnectionFactory;

private static BasicDataSource bds=new BasicDataSource();

private static ConnectionFactory fac=null;

 
//鍒濆鍖栬繛鎺ユ睜

bds.setDriverClassName(“org.postgresql.Driver”); 
//鏁版嵁搴撻┍鍔ㄧ▼搴?/span>

bds.setUrl(“JDBC:postgresql:
//localhost:5432/myDB”); //鏁版嵁搴搖rl

bds.setUsername(“postgres”);                      
//dba甯愬彿

bds.setPassword(“XXXXXXXX”);              
//瀵嗙爜

bds.setInitialSize(
100);                            //鍒濆鍖栬繛鎺ユ暟閲?/span>

bds.setMaxIdle(
10);                         //鏈澶dle鏁?/span>

bds.setMaxWait(
1000*60);                        //瓚呮椂鍥炴敹鏃墮棿

fac
=new DataSourceConnectionFactory(bds);       //寰楀埌榪炴帴宸ュ巶

Connection conn
=fac.createConnection();         //浠庢睜涓幏寰楄繛鎺?/span>

conn.close();                                   
//閲婃斁榪炴帴錛屽洖鍒版睜涓?br />
//閿姣佽繛鎺ユ睜

bds.close();

bds
=null;

fac
=null;

璇瘋嚜琛屽鐞嗘搷浣滀腑鐨勫悇縐嶅紓甯搞?/span>

鍥涖?span style="font: 7pt 'Times New Roman'">             鎵戝厠鐗岀殑鐢熸垚

娓告垙涓渶瑕佷負鐢ㄦ埛鐢熸垚闅忔満鐨勬墤鍏嬬墝錛岄鍏堟垜浠渶瑕佸垵濮嬪寲涓鍓墝錛屾斁鍒頒竴涓狧ashmap涓紝姣忓紶鐗屼互涓涓瓧鑺傝〃紺猴紝楂樹負浠h〃鑺辮壊錛岀殑涓轟唬琛ㄦ暟瀛楋紝鐢熸垚鏁村壇鐗岋細

private static HashMap cards = new HashMap();

int tmp=0;

for (int i = 0; i <4; i++{

for (int m = 0; m < 13; m++{

tmp
=((byte)(i)<<4)|((byte)m);   //浣跨敤浣嶆搷浣滄瀯閫犱竴寮犵墝

cards.put(
new Integer(i * 13 + m),new Byte((byte)tmp));

}


}


cards.put(
new Integer(53), new Byte((byte)0x4d));   //澶х帇

cards.put(
new Integer(54), new Byte((byte)0x4e));   //灝忕帇

濡備綍闅忔満鍦板緱鍒板叾涓殑N寮犵墝鍛紵鎴戜滑鐨勫仛娉曟槸鐢熸垚涓涓?-55鐨勯殢鏈烘暟錛岀敤榪欎釜闅忔満鏁頒綔涓婚敭浠嶩ashmap涓幏寰楀璞★紝鍙栧緱涔嬪悗錛屾妸璇ュ璞′粠闃熷垪涓垹闄わ紝浠ュ厤閲嶅鍙栧緱銆傜敱浜巎ava涓殑闅忔満鏁版槸鏍規嵁鏃墮棿鐢熸垚鐨勶紝鎵浠ユ湁鍙兘瀵艱嚧鐢ㄦ埛寰楀埌鐨勭墝涓嶅鏁o紝姣忎釜鐢ㄦ埛閮芥懜鍒頒竴鏉¢緳宀備笉鏄瑧璇濓紵鎵浠ュ湪鐢熸垚闅忔満鏁扮殑鏃跺欐垜浠姞鍏ヤ簡涓涓ぇ绱犳暟鏉ヤ綔榪愮畻錛?/span>

long cardId=new Long((Math.round(Math.random() * 87) % 55)).intValue();閫氳繃淇敼榪欎釜澶х礌鏁幫紝鍙互鎺у埗鏌愪釜鐢ㄦ埛鐨勭墝姣旇緝濂姐?/span>

浜斻?span style="font: 7pt 'Times New Roman'">             綰跨▼

瀹為檯涓婃湰緋葷粺騫舵病鏈夊鏉傜殑綰跨▼綆$悊錛屼絾鏄垜鎯蟲彁渚涗竴涓帶鍒跺彴璁╃鐞嗗憳鍙互綆$悊娓告垙涓葷嚎紼嬶紝鍙互璁╁畠鍋滄銆佷腑孌點佹仮澶嶃侀噸鍚姩錛屾湰鏉ョ殑璁捐鏄鐞嗗憳閫氳繃涓庣嚎紼婣鎵撲氦閬擄紝閫氳繃A鍘葷鐞嗕富綰跨▼B錛屼絾鏄啛鎮塲ava綰跨▼鐨勬湅鍙嬮兘鐭ラ亾錛岀嚎紼嬩簰鐩哥鐞嗗熀鏈笂灝辨槸涓嶅疄闄呯殑錛屼婦涓渶綆鍗曠殑渚嬪瓙錛孉濡備綍閿姣丅錛熶篃璁鎬綘浼氳璋冪敤B鐨刣estroy()鏂規硶灝卞ソ浜嗭紝緗戜笂寰堝璁茶Вjava綰跨▼鐨勮祫鏂欎篃紜疄鏄繖涔堣鐨勶紝浣嗘槸浠栦滑閮芥槸楝兼壇鐨勶紝鑷繁鍘葷湅鐪媕ava婧愪唬鐮佸惂錛孴hread.destroy()鏂規硶鐨勫疄闄呬唬鐮佸涓嬶細

public void destroy()

{

    throw new NoSuchMethodError();

}

浜嬪疄鐪熺浉鏄紝Thread.destroy()鏂規硶鑷鑷崇粓灝辨病鏈夎瀹炵幇榪囥傛墍鏈夊啓鏂囩珷錛屾暀鍒漢鐢ㄨ繖涓柟娉曢攢姣佺嚎紼嬬殑浜猴紝閮藉幓鎾炲鍚э紝涓漢涓㈠ぇ浜嗐傛渶濂界殑鍔炴硶鏄疉璐熻矗鐢熸垚涓涓狟騫朵笖鍚姩瀹冿紝鐒跺悗B鑷繁綆$悊鐢熷瓨鍛ㄦ湡錛孉鍜孊閫氳繃浣跨敤鍙叡浜殑鏂規硶鏉ラ氫俊錛岃繖鏄痵un鎺ㄨ崘鐨勫仛娉曘?/span>

鍏?span style="font: 7pt 'Times New Roman'">             寮傛娑堟伅

鐢ㄦ埛鐜╃墝鐨勮繃紼嬩腑錛屾湁寰堝涓滆タ闇瑕佽褰曚笅鏉ワ紝姣斿璁板綍鐢ㄦ埛鐨勭Н鍒嗐佺瓑綰у彉鍖栵紝璁板綍鐜╃墝鏃ュ織渚涙暟鎹粺璁$瓑錛屽綋鐢ㄦ埛鏁伴噺寰堝鐨勬椂鍊欙紝鍦ㄦ暟鎹簱涓褰曡繖浜涗俊鎭細寰堣楄垂璧勬簮錛岀敤鎴風帺浜嗕竴灞涔嬪悗浼氬彲鑳戒細絳夊緟寰堥暱鏃墮棿銆傝В鍐寵繖涓棶棰樼殑鏂規硶鏄埄鐢?a target="_blank">J2EE鐨勬秷鎭痓ean鏉ユ彁渚涘紓姝ラ氫俊鐨勬満鍒訛紝闇瑕佽褰曟暟鎹殑鏃跺欙紝緋葷粺浼氬皝瑁呬竴涓煎璞★紝鍙戦佺粰J2EE瀹瑰櫒錛岃繖涓搷浣滄槸寰堝揩鐨勶紝瀹屾垚涔嬪悗灝辮繑鍥烇紝鐢ㄦ埛鍙互緇х畫鎿嶄綔錛屼笉鐢ㄥ叧蹇冩秷鎭綍鏃惰澶勭悊銆侸2EE鐨勬秷鎭鏋跺叿澶囧涓嬬壒寰侊細

鈼囨秷鎭竴瀹氫細琚槄璇伙紝鑰屼笖鍙槄璇諱竴嬈°侸MS妗嗘灦鏈夎嚜宸辯殑綆楁硶錛屾妸娑堟伅緙撳啿鍒?a target="_blank">紜洏錛屽氨綆桱2EE鏈嶅姟鍣ㄦ鎺夛紝娑堟伅涔熶笉浼氫涪澶便?/span>

鈼囩郴緇熼噰鐢ㄧ偣瀵圭偣鐨凲ueue娑堟伅闃熷垪錛屽彲浠ヤ繚璇佸悓絳変紭鍏堢駭鐨勬秷鎭厛榪涘厛鍑恒?/span>

鍦↗boss 4.0涓紝閮ㄧ講娑堟伅Bean鍜孮ueue闃熷垪錛岄兘姣攚eblogic 8.1鏉ョ殑瀹規槗錛屽彧闇瑕佸湪jboss.XML涓0鏄庢秷鎭洰鐨勫湴錛屽鏋渏boss鍙戠幇璇ョ洰鐨勫湴涓嶅瓨鍦ㄧ殑璇濓紝浼氳嚜鍔ㄥ緩绔嬩竴涓紝瀹炲湪寰堢畝鍗曘傚叧浜庢秷鎭痓ean鐨勫紑鍙戜笌閮ㄧ講錛屾垜鏈変笓闂ㄧ殑鏂囩珷鎻忚堪銆?/span>

涓冦?span style="font: 7pt 'Times New Roman'">             鍚姩涓庨鍑?/span>

涓轟簡璁╃郴緇熷叿澶囪浜烘弧鎰忕殑鎬ц兘錛屽簲璇ュ敖閲忓鐨勯噸鐢ㄥ璞★紝鍑忓皯鍒涘緩鏂板璞°傛瘮濡備笂闈㈡彁鍒扮殑娑堟伅鍙戦侊紝鎴戜滑鐨勬搷浣滄槸鎻愪緵涓涓潤鎬佺被錛屽湪緋葷粺鍚姩鐨勬椂鍊欏氨鍒濆鍖栵紝淇濇寔涓嶫MS鏈嶅姟鍣ㄧ殑榪炴帴錛岀郴緇熷彂閫佹秷鎭殑鏃跺欙紝涓嶇敤鍐嶅幓鏌ヨJNDI鍜岀敓鎴怮ueueConnectionFactory錛岃繖鏍峰彲浠ユ彁楂樼郴緇熷搷搴旈熷害銆?/span>

鍦ㄦ暟鎹簱榪炴帴姹犵殑闂涓婏紝鎴戜滑涔熼噰鐢ㄥ悓鏍風殑鎿嶄綔錛屽惎鍔ㄧ殑鏃跺欏垵濮嬪寲N涓繛鎺ャ備絾鏄鏋滃湪鍏抽棴榪涚▼鐨勬椂鍊欎笉鍋氫換浣曟搷浣滐紝浼氬鑷碕MS鎶涘嚭socket寮傚父錛岃櫧鐒舵病浠涔堝ぇ鐨勫獎鍝嶏紝浣嗘繪樉寰椾笉涓撲笟錛岃屼笖姹犱腑鐨勮繛鎺ヤ笉琚噴鏀劇殑璇濓紝涔熷彲鑳藉鑷撮棶棰樸傛渶濂借兘澶熻緋葷粺鍍廽boss絳夋帶鍒跺彴紼嬪簭涓鏍鳳紝ctrl+c涔嬪悗鑳藉鎵ц鎿嶄綔錛岄噴鏀捐祫婧愬啀閫鍑恒傛垜浠彲浠ラ氳繃緇欒繘紼?綰跨▼鍔犱笂涓涓狧ook鏉ュ疄鐜幫紝Windows紼嬪簭鍛樺簲璇ュ榪欎釜闈炲父鐔熸倝銆?/span>

Hook搴旇鏄竴涓嚎紼嬫柟娉曪紝濡備笅錛?/span>

public class Hook extends Thread

{

    public void run()

    {

        //閲婃斁鏁版嵁搴撹繛鎺ワ紝閿姣佽繛鎺ユ睜

        //鍏抽棴涓嶫MS鐨勮繛鎺?/span>

    }

}

鍦ㄤ富綰跨▼涓姞鍏ワ細Runtime.getRuntime().addShutdownHook(new Hook()) ;閭d箞榪涚▼/綰跨▼浼氬湪閫鍑虹殑鏃跺欐墽琛孒ook鐨剅un鏂規硶錛屾竻鐞嗚祫婧愩?/span>



]]>
java.util.concurrent 澶氱嚎紼嬫鏋?/title><link>http://www.tkk7.com/jelver/articles/238159.html</link><dc:creator>鍐版渤蹇嫾</dc:creator><author>鍐版渤蹇嫾</author><pubDate>Sun, 02 Nov 2008 04:00:00 GMT</pubDate><guid>http://www.tkk7.com/jelver/articles/238159.html</guid><wfw:comment>http://www.tkk7.com/jelver/comments/238159.html</wfw:comment><comments>http://www.tkk7.com/jelver/articles/238159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jelver/comments/commentRss/238159.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jelver/services/trackbacks/238159.html</trackback:ping><description><![CDATA[     鎽樿: 鍘熸枃錛歨ttp://www.ismayday.com/?p=170 鏈榪戠敱浜庡伐浣滈渶瑕侊紝鍥炲幓濂藉ソ澶嶄範浜嗕竴閬峧ava錛屽涔犲拰娓╀範浜嗗拰澶氱嚎紼嬶紝姝e垯琛ㄨ揪寮忥紝妯″紡璁捐錛孲ocket緙栫▼絳夌浉鍏崇殑鐭ヨ瘑錛屽熀鏈畻鎶婃煇涓浉褰撶墰鐨勭▼搴忕湅鎳備簡錛屼粠涓敹鑾烽娣憋紝榪戞湡涔熶細鎶婄浉鍏崇殑鐭ヨ瘑鐐瑰仛鎴愮瑪璁版斁鍒板崥瀹㈡潵銆傚綋鐒跺湪榪欓噷寰楀ソ濂芥劅璋竴涓嬫櫉鏅熷拰鍒侊紝鍦ㄦ垜榪鋒儜鐨勬椂鍊欓棶浠栦滑鎬昏兘鎵懼埌鑷繁鎯寵鐨勭瓟妗堬紝褰撶劧榪樻湁鏅熸櫉鐨勪功錛屻婄簿閫氭鍒欒〃杈懼紡銆嬶紝鐪嬪畬涔?..  <a href='http://www.tkk7.com/jelver/articles/238159.html'>闃呰鍏ㄦ枃</a><img src ="http://www.tkk7.com/jelver/aggbug/238159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jelver/" target="_blank">鍐版渤蹇嫾</a> 2008-11-02 12:00 <a href="http://www.tkk7.com/jelver/articles/238159.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://wxzg66.com" target="_blank">精品亚洲国产成人av</a>| <a href="http://sdtuoliuta.com" target="_blank">99久久久国产精品免费牛牛</a>| <a href="http://www64427.com" target="_blank">亚洲无线观看国产精品</a>| <a href="http://13813855.com" target="_blank">免费无遮挡无码永久视频 </a>| <a href="http://jdwx58.com" target="_blank">精品亚洲国产成人av</a>| <a href="http://syeyo.com" target="_blank">久久精品国产精品亚洲精品 </a>| <a href="http://5079157.com" target="_blank">日韩视频免费在线观看</a>| <a href="http://928348.com" target="_blank">亚洲中文字幕一二三四区</a>| <a href="http://yutuzb.com" target="_blank">中文字幕精品无码亚洲字</a>| <a href="http://51nianyefan.com" target="_blank">24小时免费看片</a>| <a href="http://qqcao7.com" target="_blank">未满十八私人高清免费影院</a>| <a href="http://lyjhjx.com" target="_blank">亚洲一区二区在线免费观看</a>| <a href="http://fcw70.com" target="_blank">国产大片免费观看中文字幕</a>| <a href="http://whyandroid.com" target="_blank">美女视频黄a视频全免费网站色窝</a>| <a href="http://by22877.com" target="_blank">亚洲性线免费观看视频成熟</a>| <a href="http://jnyygs.com" target="_blank">亚洲色自偷自拍另类小说</a>| <a href="http://gsonlinet.com" target="_blank">国产精品视频免费一区二区</a>| <a href="http://phlinhng.com" target="_blank">国产性生大片免费观看性</a>| <a href="http://fholaer.com" target="_blank">亚洲经典千人经典日产</a>| <a href="http://321fafa.com" target="_blank">亚洲午夜在线电影</a>| <a href="http://fenglufzjx.com" target="_blank">亚洲国产一区二区三区</a>| <a href="http://meiluniao.com" target="_blank">无人在线直播免费观看</a>| <a href="http://miya77772.com" target="_blank">中文字幕视频免费在线观看</a>| <a href="http://cjsyw123.com" target="_blank">亚洲乱色熟女一区二区三区蜜臀</a>| <a href="http://333uy.com" target="_blank">亚洲产国偷V产偷V自拍色戒</a>| <a href="http://gkhnf.com" target="_blank">五月婷婷亚洲综合</a>| <a href="http://ziniurj.com" target="_blank">日本精品人妻无码免费大全</a>| <a href="http://dddd20.com" target="_blank">国内精品一级毛片免费看</a>| <a href="http://gift1town.com" target="_blank">午夜在线亚洲男人午在线</a>| <a href="http://shulan88.com" target="_blank">亚洲av永久无码嘿嘿嘿</a>| <a href="http://666za.com" target="_blank">久久青青草原亚洲AV无码麻豆</a>| <a href="http://7299jj.com" target="_blank">免费在线视频一区</a>| <a href="http://jastrelax.com" target="_blank">妞干网免费视频观看</a>| <a href="http://1314c.com" target="_blank">免费无码VA一区二区三区</a>| <a href="http://7788xxx.com" target="_blank">福利免费在线观看</a>| <a href="http://xcdys.com" target="_blank">猫咪免费观看人成网站在线</a>| <a href="http://scienfood.com" target="_blank">亚洲一区二区三区在线观看网站</a>| <a href="http://www-774220.com" target="_blank">亚洲天堂在线播放</a>| <a href="http://24aabb.com" target="_blank">亚洲av无码一区二区三区乱子伦</a>| <a href="http://wwwse09.com" target="_blank">亚洲日本一区二区三区在线不卡</a>| <a href="http://k9l4.com" target="_blank">国产嫩草影院精品免费网址</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>