• 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 + "
    ");
            }
        }
    }
  • 相关阅读:
    matlab 高阶(一) —— assignin与evalin
    OpenCV 图像白平衡算法(相机自动白平衡)
    matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
    matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
    OpenCV 图像清晰度评价(相机自动对焦)
    Matlab Tricks(二十五) —— 二维图像的 shuffle
    Matlab Tricks(二十五) —— 二维图像的 shuffle
    toolbox、library 的组织
    toolbox、library 的组织
    WinEdt && LaTex(三)—— 宏包
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3386956.html
Copyright © 2020-2023  润新知