[Android]Thread线程入门3--多线程
经过
每一个线程对应一个TextView。当点击Start Thread按钮,四个线程开始启动。对应的TextView分别加1.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Thread" />
<Button android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Thread" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30dip"
android:textColor="#ffff0000"
android:text="0"
android:layout_marginLeft="30dip"
android:id="@+id/txtShow1" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30dip"
android:textColor="#ffff0000"
android:text="0"
android:layout_marginLeft="30dip"
android:id="@+id/txtShow2" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30dip"
android:textColor="#ffff0000"
android:text="0"
android:layout_marginLeft="30dip"
android:id="@+id/txtShow3" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30dip"
android:textColor="#ffff0000"
android:text="0"
android:layout_marginLeft="30dip"
android:id="@+id/txtShow4" />
</LinearLayout>
源代码如下:
private MyHandler mHandler = null;;
//4个TextView
private TextView mTextView1;
private TextView mTextView2;
private TextView mTextView3;
private TextView mTextView4;
private Button mButtonStart;
private Button mButtonStop;
//对应4个计数器
private int mSecond1 = 0;
private int mSecond2 = 0;
private int mSecond3 = 0;
private int mSecond4 = 0;
private boolean mStop = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHandler = new MyHandler();
//绑定TextView
mTextView1 = (TextView)findViewById(R.id.txtShow1);
mTextView2 = (TextView)findViewById(R.id.txtShow2);
mTextView3 = (TextView)findViewById(R.id.txtShow3);
mTextView4 = (TextView)findViewById(R.id.txtShow4);
mButtonStart = (Button)findViewById(R.id.btnStart);
mButtonStop = (Button)findViewById(R.id.btnStop);
mButtonStart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//启动多线程
startMultiThread();
}
});
mButtonStop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopThread();
}
});
}
private void startMultiThread()
{
//启动4个线程
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
}
private void stopThread()
{
mStop = true;
}
private class MyHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
{
//暂且第一个textview加1,其余textview不变
mTextView1.setText(Integer.toString(mSecond1++));
mTextView2.setText(Integer.toString(mSecond2));
mTextView3.setText(Integer.toString(mSecond3));
mTextView4.setText(Integer.toString(mSecond4));
break;
}
}
}
}
private class MyThread extends Thread
{
@Override
public void run()
{
Log.i("test", "threadid=" + this.currentThread().getId());
while(!mStop)
{
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
Message msg = new Message();
msg.what = 1;
//send message
mHandler.sendMessage(msg);
}
if(mStop)
{
this.interrupt();
}
}
}
}
点击Start Thread按钮,是不是和我们设想的一样,第一个TextView加1,其余textView的数值不变呢?
{
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
{
//mSecond ++; //second increase
//显示传递出来的数字msg.arg1.而不再自己计数
mTextView1.setText(Integer.toString(msg.arg1));
mTextView2.setText(Integer.toString(msg.arg1));
mTextView3.setText(Integer.toString(msg.arg1));
mTextView4.setText(Integer.toString(msg.arg1));
break;
}
}
}
}
private class MyThread extends Thread
{
//在线程里声明一个变量,用来计数
private int mSecond = 0;
@Override
public void run()
{
Log.i("test", "threadid=" + this.currentThread().getId());
while(!mStop)
{
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
Log.e("test", "enter run exception:" + e.getLocalizedMessage());
e.printStackTrace();
}
//每隔1秒加1
mSecond ++;
//Log.i("test", "enter run 2");
Message msg = Message.obtain();
msg.what = 1;
msg.arg1 = mSecond; //将数值传递出去
//send message
mHandler.sendMessage(msg);
}
if(mStop)
this.interrupt();
}
}
运行后就会发现四个TextView都是以加1的速度整齐划一的变换着。
这时候,我们希望每一个TextView都有自己的数字显示。那么应该如何实现呢?请看下篇博文。
转载于:https://www.cnblogs.com/Codenewbie/archive/2013/03/28/2986723.html
[Android]Thread线程入门3--多线程相关推荐
- Thread线程类及多线程
1.进程.线程.并发.并行是什么? 1)进程:操作系统中可以运行多个任务(程序),这些运行的任务(程序)被称为进程.程序的运行产生进程(内存空间.程序执行的堆栈),可以这样说,进程是作为操作系统分配资 ...
- java线程入门_java多线程快速入门(一)
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...
- android thread线程通讯
参考:http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/ 下载链接 源码: package sample.thre ...
- android c++ 线程,Android多线程分析之二:Thread的实现
Android多线程分析之二:Thread的实现在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Th ...
- 在Android中使用Handler和Thread线程执行后台操作
在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...
- android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...
我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...
- Android中使用Thread线程出现的问题
很多初入Android或Java开发的新手对Thread.Looper.Handler和Message仍然比较迷惑,衍生的有HandlerThread.java.util.concurrent.Tas ...
- android java thread_Android中断并重启一个Thread线程的简单方法
这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public voi ...
- java5个线程_java基础thread——java5之后的多线程(浅尝辄止)
承上启下 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock. 一.JD ...
最新文章
- avpicture_fill的实现
- 约束,索引,rownumrownum
- 【错误记录】Android 内存泄漏 错误排查记录 ( FinalizerReference 内存泄漏 )
- 【杂谈】有三AI专栏作者邀请,在这里写文章能获得什么,有什么不同?
- 26个音序的正确写法和占格_别让瞎练毁了健康,26个健身动作正误对比图,让我们正确健身...
- 逆向工程核心原理学习笔记(二):字符串检索法查找main函数
- 示例化讲解RIP路由更新机制
- Java虚拟机(三)——类加载子系统概述
- 在Release版本中如何关闭Debug版本中的log
- 科研绘图神器之Plotluck(如何节省时间)
- soc设计方法与实现_冷轧钢板局部激光热处理实现汽车轻量化设计新方法
- 企业信息化基本指标构成方案(试行)上
- Java核心技术 卷I 基础知识 学习笔记(1)
- 网站打开速度慢如何压缩图片_8个免费实用的图片压缩网站、软件(含下载地址)吐血推荐...
- 软件构造之java类图
- APP兼容性专项测试
- 数据结构 WSADATA
- 华为交换机dhcp获取不到_S7706交换机客户端无法通过DHCP获取地址问题
- 360影视大全 python_「www.dy2018.com」python爬取电影天堂(www.dy2018.com)所有视屏的所有链接 - 金橙教程网...
- 【图像识别】基于主成分分析算法实现人脸二维码识别matlab代码
热门文章
- AAA Password Expiry in Cisco IOS Easy***
- vue调试工具 -- vue-devtools 安装方法
- Hibernate -- hibernate.cfg.xml 核心配置文件
- Android零基础入门第31节:几乎不用但要了解的AbsoluteLayout绝对布局
- Word2013中制作按钮控件
- 带命名空间的XML的dom4j应用转
- Android开发,使用背景图(xml drawable)为view 设置边框
- Sql Server系列:键和约束
- CDialog中使用工具栏和状态栏
- C文件 写入 读取 函数