日期:2014-05-18  浏览次数:20743 次

多线程该怎么设计?求高手
在编程时候遇到这样的问题:
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