android Thread和Runnable的区别

1) Thread

package com.example.androidrunnable;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

class MyThread extends Thread{
	/*循环标记*/
	public boolean flag=false;
	/*计数器*/
	private int counter=0;
	/*参数*/
	private String threadName;
	
	public MyThread(String _threadName){
		this.threadName=_threadName;
	}
	public void run(){
		while(flag){
			Log.i("tag", threadName+" "+String.valueOf(++counter));
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
public class MainActivity extends Activity {

	private Button startButton=null;
	private Button endButton=null;
	private MyThread myThread1=null;
	private MyThread myThread2=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/*开始线程*/
		startButton=(Button)findViewById(R.id.startButton);
		startButton.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(myThread1==null){
					myThread1=new MyThread("thread1");
					myThread1.flag=true;
					myThread1.start();
				}
				if(myThread2==null){
					myThread2=new MyThread("thread2");
					myThread2.flag=true;
					myThread2.start();
				}
			}
		});
		/*结束线程*/
		endButton=(Button)findViewById(R.id.endButton);
		endButton.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(myThread1!=null){
					myThread1.flag=false;
					myThread1=null;
				}
				if(myThread2!=null){
					myThread2.flag=false;
					myThread2=null;
				}
			}
		});
	}

	@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;
	}
}

Thread的运行结果



2) Runnable

package com.example.androidrunnable;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

class MyRunnable implements Runnable{
	/*循环标记*/
	public boolean flag=false;
	/*计数器*/
	private int counter=0;
	/*参数*/
	private String runnableName;
	
	public MyRunnable(String _runnableName){
		this.runnableName=_runnableName;
	}
	public void run(){
		while(flag){
			Log.i("tag", runnableName+" "+String.valueOf(++counter));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
public class MainActivity extends Activity {

	private Button startButton=null;
	private Button endButton=null;
	private MyRunnable myRunnable=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/*开始线程*/
		startButton=(Button)findViewById(R.id.startButton);
		startButton.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(myRunnable==null){
					myRunnable=new MyRunnable("runnable1");
					myRunnable.flag=true;
					/*Runnable可以实现资源共享*/
					new Thread(myRunnable).start();
					new Thread(myRunnable).start();
				}
			}
		});
		/*结束线程*/
		endButton=(Button)findViewById(R.id.endButton);
		endButton.setOnClickListener(new Button.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(myRunnable!=null){
					myRunnable.flag=false;
					myRunnable=null;
				}
			}
		});
	}

	@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;
	}
}
Runnable的运行结果



小结:

在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

1)避免点继承的局限,一个类可以继承多个接口。
2)适合于资源的共享


以上面的程序为例

1)Thread都各自运行,没有实现资源共享

2)Runnable实现了资源共享


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值