以Android环境为例的多线程学习笔记(一)------- 线程的创建

来源:互联网 发布:mysql 最近一条记录 编辑:程序博客网 时间:2021/11/29 08:38

多进程和多线程的本质区别在于其实每一个进程都拥有自己的一整套变量,说白了,可以拥有各种资源,而线程则是共享数据的,

同时也正是因为共享数据从而使得在线程之间的通信要比在进程之间的更有效、更容易。由与我近段时间在学些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()方法,此时只是会执行同一个线程中的任务,而不会启动一个新的线程。


2 0
原创粉丝点击