美文网首页
Thread的使用说明

Thread的使用说明

作者: 取了个很好听的名字 | 来源:发表于2019-08-26 09:56 被阅读0次

前言

Java当中实现多线程的方法主要有两种方式:集成Thread类和实现Runnable接口定义线程的运行时行为,本文简单介绍一下Thread的简单使用

Thread简介

(1) 定义
Thread:Java中实现线程的具体类,封装了所有的线程操作,通过Thread实例来控制线程行为(运行,停止)
(2)作用
实现多线程
(3)优点
实现简单 ,只需要继承Thread类并重写run()方法即可
(4)缺点
局限性大:由于集成了Thread类,而Java为单继承方式,意味着当前线程不能再继承其他的类。
无法共享资源:由于创建一个线程就常见了一个线程实例,而线程实例之间的数据无法进行共享。
资源消耗大:线程为相当于“一次性消耗品”,当运行完后就需要进行销毁,有当有多个耗时任务时就需要对应开启多个线程进行处理,且开启销毁多个线程本身就会消耗大量资源。

Thread的使用方法

Thread主要有两种使用方法:(1)标准方式(2)匿名方式
(1)标准方式

public class MainActivity extends AppCompatActivity {


    //1.继承Thread类
    class MyThread extends  Thread{
        //2.重写run方法
        @Override
        public void run() {
            super.run();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建线程实现
        MyThread myThread=new MyThread();
        //通过线程实例控制线程的运行状态(运行,停止)
        myThread.start();
    }
}

(2)匿名方式

   //1.创建线程实例
        new Thread(){
            //2.重写run方法
            @Override
            public void run() {
                super.run();
            }
            //通过线程实例控制线程的行为(运行、停止)
        }.start();

两种方法的对比

名称 优点 缺点
标准方式 线程类和对象可以复用 代码量大,操作复杂
匿名方式 代码简洁 无法复用线程实例对象

这也就是说如果有多个地方用到了线程类则选择标准方式,如果该线程只在一处使用则可以考虑匿名方式。

实际使用

模仿售票,一共有两个服务窗口,每一秒售出一张票,每个窗口有100张票。
activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zhqy.threaddemo.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="售票"
        />

</android.support.constraint.ConstraintLayout>

MainActivity.java:

package com.zhqy.threaddemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                  TicketThread th1=new TicketThread("th1");
                  TicketThread th2=new TicketThread("th2");
                  th1.start();
                  th2.start();
            }
        });
    }
    //1.继承Thread类
    class TicketThread extends  Thread{
        //初始化票数
        int ticket=100;
        String name;
        public TicketThread(String name){
            this.name=name;
        }

        @Override
        public void run() {
            super.run();
            //卖票
            while (ticket>0){
                Log.e(name,"剩余票数:"+(--ticket));
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    }


}

测试结果

08-26 10:12:00.903 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:99
08-26 10:12:00.903 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:99
08-26 10:12:01.903 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:98
08-26 10:12:01.903 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:98
08-26 10:12:02.904 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:97
08-26 10:12:02.904 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:97
08-26 10:12:03.904 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:96
08-26 10:12:03.904 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:96
08-26 10:12:04.905 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:95
08-26 10:12:04.905 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:95
08-26 10:12:05.905 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:94
08-26 10:12:05.905 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:94
08-26 10:12:06.905 5311-5362/com.zhqy.threaddemo E/th1: 剩余票数:93
08-26 10:12:06.905 5311-5363/com.zhqy.threaddemo E/th2: 剩余票数:93
.....

从测试结果可以看出两个线程的资源并没有共享,这是由于各个线程相对独立(不是同一个线程实例)。
以上就是Thead类实现多线程的全部内容。

相关文章

  • Thread的使用说明

    前言 Java当中实现多线程的方法主要有两种方式:集成Thread类和实现Runnable接口定义线程的运行时行为...

  • Markdown语法

    一标题 使用说明:# + 空格 + 标题文字。 标题2 使用说明:## + 空格 + 标题文字。 二引用 使用说明...

  • python 补充学习 线程&装饰器

    python补充学习 thread _thread 调用 _thread 模块中的start_new_thread...

  • 2018-09-03 java多线程

    1.extends Thread类定义:Thread thread=new myThread();thread....

  • Android面试之Thread

    ## Thread 相关知识点整理 1,Thread的作用,Process和Thread的区别 2,Thread的...

  • 关于android 线程

    thread 线程几种状态 创建(new) Thread thread=new Thread; 就绪(runnab...

  • 使用threading模块

    输出的结果是: 实例化Thread(调用Thread())和调用thread.start_new_thread()...

  • 线程协程WWW

    线程:Thread // 新线程-1 调用静态方法 Thread m_Thread_1 = new Thread(...

  • 2019-06-04

    RedisTemplate常用集合使用说明(一) RedisTemplate常用集合使用说明-opsForValu...

  • Java 多线程基础知识

    Thread.run和Thread.start的区别: thread.run是方法,调用thread.run,那么...

网友评论

      本文标题:Thread的使用说明

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