zoukankan      html  css  js  c++  java
  • android 多线程

    这里虽然是个socket的server端的例子  但是感觉多线程蛮到位的

    参考 http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/

    package com.example.an4;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.widget.TextView;
    public class Server extends Activity {
        private ServerSocket serverSocket;
        Handler updateConversationHandler;
        Thread serverThread = null;
        private TextView text;
        public static final int SERVERPORT = 6000;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            text = (TextView) findViewById(R.id.text2);
            updateConversationHandler = new Handler();
            //new ServerThread() 是一个ServerThread 类的实例 同时也是一个Runnable
            this.serverThread = new Thread(new ServerThread());
            this.serverThread.start();//创建新线程
        }
        @Override
        protected void onStop() {
            super.onStop();
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        class ServerThread implements Runnable {
            public void run() {
                Socket socket = null;
                try {
                    serverSocket = new ServerSocket(SERVERPORT);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                while (!Thread.currentThread().isInterrupted()) {
                    try {
                        socket = serverSocket.accept();
                        //commThread实际上是Runnable
                        //还可以这样Runnable commThread = new CommunicationThread(socket);
                        CommunicationThread commThread = new CommunicationThread(socket);
                        new Thread(commThread).start();//创建新线程  注意! handler.post(xxx)并不能创建新线程的  因为没有start
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        class CommunicationThread implements Runnable {
            private Socket clientSocket;
            private BufferedReader input;
            public CommunicationThread(Socket clientSocket) {
                this.clientSocket = clientSocket;
                try {
                    this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            public void run() {
                while (!Thread.currentThread().isInterrupted()) {
                    try {
                        String read = input.readLine();
                        //post(Runnable r) //这里要填一个Runnable的对象 
                        //Runnable是一个接口  怎么会有对象呢   哈哈  就是Runnable实现类的一个实例
                        //当然也可以用 匿名内部类的形式 Runnable read = new Runnable() {...}
                        // 这里 read 实际上是Runnable接口的实现类的实例
                        updateConversationHandler.post(new updateUIThread(read));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        class updateUIThread implements Runnable {
            private String msg;
            public updateUIThread(String str) {
                this.msg = str;
            }
            @Override
            public void run() {
                text.setText(text.getText().toString()+"Client Says: "+ msg + "
    ");
            }
        }
    }
  • 相关阅读:
    C#驱动mysql明明数值不为空却一直说DBNull.Value的诡异情况
    WinForm解决UI假死
    js实现的简单遮罩层
    mongodb C#连接报错 Invalid credentials for database 'admin'
    c#记录代码运行的耗时。
    C# LINQ
    timeScale减速对动画影响的处理方法(转)
    委托
    Unity3D单例类模板类
    Unity协程(Coroutine)管理类——TaskManager工具分享(转)
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3386956.html
Copyright © 2011-2022 走看看