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

多线程编程的初识

作者: 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