Android中实现多线程的方法
第一种:继承Thread类,实现run()方法;调用父类Thread的start()方法,启动线程。
package com.example.android_thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.TextView; public class MainActivity extends Activity { TextView tv; MyHandler myHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); new MyThread("thread1").start(); new MyThread("thread2").start(); myHandler = new MyHandler(); } class MyThread extends Thread{ String name; public MyThread(String t1){ name=t1; } public void run(){ Message msg=new Message(); Bundle b=new Bundle(); b.putString("text", name); msg.setData(b); myHandler.sendMessage(msg); } } class MyHandler extends Handler{ public MyHandler(){ } public void handleMessage(Message msg){ super.handleMessage(msg); Bundle b=msg.getData(); String str=b.getString("text"); tv.setText(str); Log.i("xxx",str); } } }
第二种:继承Runnable接口,实现run()方法;把对象传递给Thread的带Runnable参数的构造函数,然后调用Thread的start()方法,启动线程。---------------->一般使用这种方式实现多线程
继承Thread类的缺点是,由于java不支持多重继承,因此只能单一继承
但是实现Runnable接口就不一样了。可以实现多个接口。
package com.example.android_thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.TextView; public class MainActivity extends Activity { TextView tv; MyHandler myHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); myHandler = new MyHandler(); //区别1,这里也可以修改一下 new Thread(new MyThread("thread1")).start(); new Thread(new MyThread("thread2")).start(); } //区别2,这里可以修改一下, class MyThread implements Runnable{ String name; public MyThread(String t1){ name=t1; } public void run(){ Message msg=new Message(); Bundle b=new Bundle(); b.putString("text", name); msg.setData(b); myHandler.sendMessage(msg); } } class MyHandler extends Handler{ public MyHandler(){ } public void handleMessage(Message msg){ super.handleMessage(msg); Bundle b=msg.getData(); String str=b.getString("text"); tv.setText(str); Log.i("xxx",str); } } }
更简练的一种写法:
在Runnable或者Thread的构造函数中实现线程的启动,实现的主要代码
可以修改为:
new Thread("thread1") new Thread("thread2")
class MyThread implements Runnable{ String name; Thread thread; public MyThread(String t1){ name=t1; thread(this).start() } public void run(){ Message msg=new Message(); Bundle b=new Bundle(); b.putString("text", name); msg.setData(b); myHandler.sendMessage(msg); } }

浙公网安备 33010602011771号