以Android环境为例的多线程学习笔记(一)------- 线程的创建
来源:互联网 发布:mysql 最近一条记录 编辑:程序博客网 时间:2024/03/29 15:24
多进程和多线程的本质区别在于其实每一个进程都拥有自己的一整套变量,说白了,可以拥有各种资源,而线程则是共享数据的,
同时也正是因为共享数据从而使得在线程之间的通信要比在进程之间的更有效、更容易。由与我近段时间在学些Android所以本部分的代码
都以Android开发环境为基础,但其实这本质也就是JAVA中的多线程,两者是没有太大区别的:
首先Thread类就是线程类,可以用它来创建一个新的线程,创建一个简单的线程的方法大致有两类:
方法一:
步骤一:建立一个继承了Runnable接口(这个接口非常简单,只有一个void run();方法)的类且实现该接口中的run()方法。
步骤二:将要在线程中完成的任务代码移到该run方法中。
步骤三:创建一个该类的对象。
步骤四:利用刚才创建的对象去创建一个Thread对象。
步骤五:即可调用刚才的Thread对象的start()来启动一个线程
For example:
//步骤一、步骤二
public class TestRunable implements Runnable
{
private MyHandler handler = null;
public TestRunable(MyHandler handler1) {
handler = handler1;
}
int i = 1;
@Override
public void run() {
// TODO Auto-generated method stub
for(;i<10;i++)
{
}
aa = i;
Message message = new Message();
message.what = YYC;//子线程运行完后向UI线程通信
handler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
MyHandler handler = new MyHandler();//Android中用于在线程之间通信的机制
//步骤三
TestRunable tr = new TestRunable(handler);
//步骤四
Thread thread = new Thread(tr);
//步骤五
thread.start();//开启一个新线程
/*
*Android的UI线程中处理消息的机制
*/
private class MyHandler extends Handler{
public void handleMessage(Message mes)
{
switch(mes.what)
{
case YYC:
Log.d("YYYYYYYYY", "YYC");
Toast.makeText(getApplicationContext(), ""+aa,
Toast.LENGTH_SHORT).show();
break;
}
}
};
方法二:
也可以通过直接创建一个继承了Thread类的子类,并在其run()方法中实现任务代码,之后直接调用该类对象的start()方法即可启动该线程。
For example:
public class MyThread extends Thread
{
MyHandler handler = null;
public MyThread(MyHandler handler1)
{
handler = handler1;
}
public void run()
{
int i;
for(i = 0;i<10;i++)
{
}
aa = i;
Message message = new Message();
message.what = YYC;//子线程运行完后向UI线程通信
handler.sendMessage(message);
}
}
MyHandler handler = new MyHandler();
MyThread thread2 = new MyThread(handler);
thread2.start();//开启一个新线程
注意在此处有一个和容易混淆的误区就是不要直接调用Thread或Runnable类对象的run()方法,此时只是会执行同一个线程中的任务,而不会启动一个新的线程。
- 以Android环境为例的多线程学习笔记(一)------- 线程的创建
- 以Android环境为例的多线程学习笔记(五)------------线程池
- 以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制
- 以Android环境为例的多线程学习笔记(三)-----------阻塞队列
- 以Android环境为例的多线程学习笔记(四)----------Callable与Future
- 以Android环境为例的多线程学习笔记———-Callable与Future
- 多线程学习(一)线程概念&线程的创建
- UNIX环境编程学习笔记(26)——多线程编程(一):创建和终止线程
- Java 多线程(一) 线程的创建
- Java 多线程(一) 线程的创建
- java多线程编程学习笔记---线程的创建
- 多线程系列一——何为线程与java中线程的创建
- 多线程学习笔记(一)之线程创建与线程状态
- 深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
- 深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
- java多线程学习笔记(一)——多线程的创建
- c#多线程(一):线程的创建
- java多线程学习(一)之创建线程的两种方式
- Oracle增加表空间
- java 线程 以及wait()和notify()
- 海上發展 (朝鮮歷史 韓長庚)
- 74 Open Source VoIP Apps & Resources
- C陷阱篇之移位运算
- 以Android环境为例的多线程学习笔记(一)------- 线程的创建
- Android怎样才能完全退出程序
- 代码块同步
- 成为IT精英,我奋斗了7年
- NYOJ 31 5个数求最值
- android 数据库用sql语句的 crud
- tomcat学习笔记(二) 模拟一个简单的servlet容器
- 我来了 csdn
- Android JNI抛出异常处理