多线程该如何设计?求高手

   阅读
多线程该怎么设计?求高手
在编程时候遇到这样的问题:
1.图形界面显示某个东西,如果后台进行大量运算,并且是单线程,就会显示无响应。
2.对交互产生的信息进行大量运算methodA()(比如,对两次输入的数字比较大小,显示出比较结果,并将结果清零)。

如果用一个线程,肯定会造成界面无响应。
如果用多线程,怎么触发,怎么设计?

我之前的设计是这样的,将methodA()设计为单例模式,每进行一次交互,就调用一次methodA()。因为methodA()是线程安全的,所以按理来说是能够比较出两次结果的。但事实上,由于我学的不精,设计是有问题的,实现不了我想要实现的结果,请教下各位。

public static SpritePositionCompare getInstance() {
if (spcInstance == null) {
synchronized (SpritePositionCompare.class) {
// synchronized (spcInstance) {
if (spcInstance == null) {
spcInstance = new SpritePositionCompare();
alive = false;
}
}
}
return spcInstance;
}

------解决方案--------------------
package com.example.socketdemo;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
private static final String TAG = "MainActivity";
// 定义侦听端口号
private final int SERVER_PORT = 7100;
private TextView textView;
private String content = "客户端输入的值:";
private Button btn, disbtn;
ServerSocket serverSocket;
Socket socket;
Thread bb,aa;
@Override

//activity创建的时候给各变量赋值
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainSocket);
btn = (Button) findViewById(R.id.btnconnect);// 连接服务器的按钮
btn.setOnClickListener(this);
textView = (TextView) findViewById(R.id.tv);
disbtn = (Button) findViewById(R.id.btndisconnect);
disbtn.setOnClickListener(this);

}

//你可以将计算的函数换到这里来
private void startServer() {
try {
// ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
 serverSocket = new ServerSocket(SERVER_PORT);
// 循环侦听客户端连接请求
while (true) {

 socket = serverSocket.accept();
try {
Log.e(TAG, "有人来访:");
// 等待客户端发送打开网站的消息
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String str = in.readLine();
content += str + "\n";
DataOutputStream dos = new DataOutputStream(
socket.getOutputStream());
dos.writeUTF("hello,client");

//计算完以后通过这个向主线程发消息 也就是线程间的通信
Message msg = mHandler.obtainMessage();
msg.obj = content;

mHandler.sendMessage(msg);

} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
Thread.sleep(3000);
}
} catch (Exception e) {
e.printStackTrace();
}
}


//这是主线程的handler,处理你给主线程发来的消息
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.obj.toString());

}

};

//按钮的onclick事件
@Override
public void onClick(View v) {
if (v == btn) {
// 开一个新的线程来侦听客户端连接及发来的信息和打开相应网站
 aa = new Thread() {
public void run() {
startServer();
}
};
aa.start();
System.out.println("线程开启");
}
else if(v==disbtn)
{
System.out.println("点击了关闭按钮");
 bb = new Thread() {
public void run() {
stopServer();
}
};
bb.start();
System.out.println("线程关闭");
}

}
private void stopServer() {
阅读