Andorid 多线程(一):Thread 基本使用

线程的基本使用

觅思.澈  Thread 与 Runnable 对比  https://www.cnblogs.com/gw811/archive/2012/10/15/2724882.html 

为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢?

在Java中,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类.这样,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,
那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。因此,如果自定义类必须扩展其他的类,
那么就可以使用实现Runnable接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。

实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,
从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,
几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。

 

一.extends Thread 

package com.gatsby.crushthread;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MyThread().start();
    }
}

class MyThread extends Thread {
    int i = 1;
    @Override
    public void run() {
        while (i < 100) {
            Log.d("gatsby", "i->" + (i++));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
} 

  

new MyThread().start();

  

二.Runnable

package com.gatsby.crushthread;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyRunnable();
    }

    public void MyRunnable() {

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                int i = 1;
                while (i < 100) {
                    Log.d("gatsby", "i->" + i++);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

  

三.implents Runnable

package com.gatsby.crushthread;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new Thread(new MyRunnable()).start();
    }
}


class MyRunnable implements Runnable {
    int i = 1;

    @Override
    public void run() {
        while (i < 100) {
            Log.d("gatsby", "i->" + i++);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 new Thread(new MyRunnable()).start();

 

 Thread thread = new Thread(new MyRunnable());
 thread.start();

 

四.匿名内部类

package com.gatsby.crushthread;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 1;
                while (i < 100) {
                    Log.d("gatsby", "i->" + i++);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

  

 五.通过Handler启动线程

package com.gatsby.threadtest;

import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private int count = 0;
    private Handler mHandler = new Handler();
    private Runnable mRunnable = new Runnable() {
        public void run() {
            Log.d("gatsby", Thread.currentThread().getName() + "->" + count);
            count++;
            setTitle("" + count);
            mHandler.postDelayed(mRunnable, 1000);  //给自己发送消息,自运行
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 通过Handler启动线程
        mHandler.post(mRunnable);  //发送消息,启动线程运行
    }

    @Override
    protected void onDestroy() {
        //将线程销毁掉
        mHandler.removeCallbacks(mRunnable);
        super.onDestroy();
    }
}

  

 

 


posted @ 2020-05-18 23:38  CrushGirl  阅读(199)  评论(0编辑  收藏  举报