美文网首页
多线程编程的初识

多线程编程的初识

作者: W_Nicotine | 来源:发表于2017-11-25 14:50 被阅读0次

什么是线程?

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。

什么是多线程?

在单个程序中同时运行多个线程完成不同的工作,称为多线程

线程

线程的基本用法

1.继承Thread
  • 定义一个线程只需要新建一个类来继承Thread然后重写父类的run()方法,并在里面写耗时逻辑就可以了。如下:
class MyThread extends Thread{
   @Override
   public void run(){
       //具体的耗时逻辑
   }
}
  • 启动线程 :new出新建类MyThread 的实例,然后调用它的start() 方法,这样run() 方法中的代码就会在子线程当中运行。如下:
new MyThread().start();
2.实现Runnable接口
  • 使用继承的方式耦合性会有点高,更多的时候我们都是会选择使用实现Runnable接口的方式来定义一个线程。如下:
class MyThread implements Runnable {
    @Override
    public void run() {
        //具体的耗时操作
    }
} 
  • 启动线程:
MyThread myThread = new MyThread();
new Thread(myThread).start();
3.匿名类方式
  new Thread(new Runnable(){
        @Override
         public void run() {
             //具体的耗时操作
         }
     }).start();

在子线程中更新UI

方法一:使用Handler。
  • 在主线程中定义Handler
Handler mHandler = new Handler() {  
  
        @Override  
        public void handleMessage(Message msg) {  
            super.handleMessage(msg);  
            switch (msg.what) {  
            case 0:  
                //完成主界面更新,拿到数据  
                String data = (String)msg.obj;  
                  
                updateWeather();  
                textView.setText(data);  
                break;  
            default:  
                break;  
            }  
        }  
    }; 
  • 子线程发消息,通知Handler更新UI.
private void updateWeather() {           
        new Thread(new Runnable(){  
            @Override  
            public void run() {  
                //耗时操作,完成之后发送消息给Handler,完成UI更新;  
                mHandler.sendEmptyMessage(0);  
                  
                //需要数据传递,用下面方法;  
                Message msg =new Message();  
                msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等;  
                mHandler.sendMessage(msg);  
            }           
        }).start();           
    }  
方法二:用Activity对象的runOnUiThread方法
new Thread() {  
            public void run() {  
                //这儿是耗时操作,完成之后更新UI;  
                runOnUiThread(new Runnable(){  
  
                    @Override  
                    public void run() {  
                        //更新UI  
                        imageView.setImageBitmap(bitmap);  
                    }  
                      
                });  
            }  
        }.start(); 
Activity activity = (Activity) imageView.getContext();  
                activity.runOnUiThread(new Runnable() {  
  
                    @Override  
                    public void run() {  
                        imageView.setImageBitmap(bitmap);  
                    }  
                }); 

总结:

虽然在暑假的时候有粗略的看过这个知识点,但是印象不是很深刻,现在花一点时间继续学习这个知识点后发现,多线程的编程对我来说还是比较复杂的,我会在今后的学习中再继续学习这个知识点。

相关文章

网友评论

      本文标题:多线程编程的初识

      本文链接:https://www.haomeiwen.com/subject/mihcbxtx.html