android开发线程同步

新手,遇到一个问题,折腾了老半天也没找出为什么。我线程同步这块到底有什么问题了?这里用到的也不复杂啊。
package com.example.wangluotongxun;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setView();
setHandleListener();
setThread1();
}
private Handler handler=null;
private Thread1 thread1=null;
private Thread2 thread2=null;
private String command;
private final Object obj=new Object();
private void setThread1() {
// TODO Auto-generated method stub
thread1=new Thread1();
thread1.start();
}

private void setView() {
// TODO Auto-generated method stub
MViews.tv=(TextView)findViewById(R.id.textview);
MViews.bn=(Button)findViewById(R.id.button);
MViews.et=(TextView)findViewById(R.id.edittext);
OnClickListener l=new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
while(handler==null||thread1==null);
command=MViews.et.getText().toString();
thread2=new Thread2();
thread2.start();
}
};
MViews.bn.setOnClickListener(l);
}

private void setHandleListener() {
handler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 100:
MViews.tv.setText(msg.getData().getString("str"));break;
case 200:
Toast.makeText(MainActivity.this, msg.getData().getString("str"), Toast.LENGTH_LONG).show();break;
}
}
};
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

private class Thread1 extends Thread{
@SuppressWarnings("unused")
private Socket socket;
private Handler handler;
private DataInputStream in;
private DataOutputStream out;
public void run(){
try {
setsocket();
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
synchronized(obj){obj.wait();}
startsocket();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
private void startsocket() throws IOException{
// TODO Auto-generated method stub
Message msg=new Message();
Bundle bundle=new Bundle();
msg.what=100;
String str="#";
out.writeUTF(command);
out.flush();
while((str=in.readUTF().trim())!=null){
bundle.putString("str",str);
msg.setData(bundle);
handler.sendMessage(msg);
return;
}

}
/**
 * @param args
 * @throws IOException 
 */
private void setsocket() throws IOException{
// TODO Auto-generated method stub
try {
socket=new Socket();
SocketAddress socketAddress=new InetSocketAddress("192.168.1.102",8011);
socket.connect(socketAddress,5000);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
handler.sendMessage(Mmsg.setMessage(200, 0, 1, "str", "Unknow Eorro!"));
} catch (IOException e) {
// TODO Auto-generated catch block
handler.sendMessage(Mmsg.setMessage(200, 0, 1, "str", "Unknow Eorro!"));
}
if (socket.isConnected()){
handler.sendMessage(Mmsg.setMessage(200, 0, 1, "str", "connected!"));
}
else
handler.sendMessage(Mmsg.setMessage(200, 0, 1, "str", "failed to connect!"));
}

}

private class Thread2 extends Thread{
public void run()
{
synchronized(obj){obj.notify();}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值