Java继承Thread类创建线程类示例

本文实例讲述了Java继承Thread类创建线程类。分享给大家供大家参考,具体如下:

一 点睛

通过继承Thread类创建线程并启动多线程的步骤:

1 定义Thread的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务。因此run()方法称为线程执行体。

2 创建Thread子类的实例,即创建子线程对象。

3 调用线程对象的start()方法来启动该线程。

二 代码

// 通过继承Thread类来创建线程类
public class FirstThread extends Thread
{
  private int i ;
  // 重写run方法,run方法的方法体就是线程执行体
  public void run()
  {
    for ( ; i < 100 ; i++ )
    {
      // 当线程类继承Thread类时,直接使用this即可获取当前线程
      // Thread对象的getName()返回当前该线程的名字
      // 因此可以直接调用getName()方法返回当前线程的名
      System.out.println(getName() + " " + i);
    }
  }
  public static void main(String[] args)
  {
    for (int i = 0; i < 100; i++)
    {
      // 调用Thread的currentThread方法获取当前线程
      System.out.println(Thread.currentThread().getName()
        + " " + i);
      if (i == 20)
      {
        // 创建、并启动第一条线程
        new FirstThread().start();
        // 创建、并启动第二条线程
        new FirstThread().start();
      }
    }
  }
}

三 运行

......
main 20
main 21
main 22
Thread-0 0
main 23
Thread-1 0
main 24
Thread-0 1
main 25
Thread-1 1
main 26
Thread-0 2
main 27
Thread-1 2
main 28
......

四 说明

1 虽然程序只显示地创建并启动了2个线程,但实际上有3个线程,因为还有一个主线程。main()方法的方法体代表主线程的线程执行体。

2 Thread-0和Thread-1两个线程输出的i变量不连续。这是因为每次创建线程对象都需要创建一个FirstThread对象,所以Thread-0和Thread-1不能共享该实例变量。

3 使用继承Thread类的方法来创建线程时,多个线程之间无法共享线程类的实例变量。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java多线程并发executorservice(任务调度)类

    复制代码 代码如下: package com.yao; import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit; /** * 以下是一个带方法的类,它设置了 ScheduledExecutorService ,2

  • java实现适用于安卓的文件下载线程类

    代码非常简单实用,这里就不多废话了,直接奉上源码 package android.mooc.tools; import java.io.BufferedInputStream; import java.io.File; import java.io.RandomAccessFile; import java.net.URL; import java.net.URLConnection; import android.util.Log; public class FileDownloadThrea

  • Java多线程继承Thread类详解第1/2页

    调用方法: /** * 点击量/月(年)Thread */ public void yearlyClickThread() { // 获取参数 String year = getPara("year"); // 统计数据集X List<String> xList = new ArrayList<String>(); xList.add("January"); xList.add("February"); xList.add

  • 详谈Java几种线程池类型介绍及使用方法

    一.线程池使用场景 •单个任务处理时间短 •将需处理的任务数量大 二.使用Java线程池好处 1.使用new Thread()创建线程的弊端: •每次通过new Thread()创建对象性能不佳. •线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom. •缺乏更多功能,如定时执行.定期执行.线程中断. 2.使用Java线程池的好处: •重用存在的线程,减少对象创建.消亡的开销,提升性能. •可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞

  • 深入解析Java中ThreadLocal线程类的作用和用法

    ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量.这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,每个线程只能拿到该变量的一个副本,这是Java API中的描述,通过阅读API源码,发现并非副本,副本什么概念?克隆品? 或者是别的样子,太模糊.   准确的说,应该是ThreadLocal类型的变量内部的注册表(Map<Thread,T>)发生了变化,但ThreadLocal类型的变量本身的确是一个,这才是本质!  

  • java多线程Future和Callable类示例分享

    一,描写叙述 ​在多线程下编程的时候.大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取每一个线程中返回的数据然后再做统一处理,在这种需求下,Future与Callable的组合就派上了非常大的用场. 也有人会说,我能够使用同步来完毕这个需求啊,普通情况下确实能够.可是在一种特殊情况下就不行了: ​想象,你开启了多个线程同步计算一些数据,可是大家都知道,线程是会争用资源的,也就是说.你开启多个线程来同步计算数据时.事实上线程之间的计算顺序是不可空的,当然除非你非非常大周折去处理

  • java线程之用Thread类创建线程的方法

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下: 复制代码 代码如下: public Thread( ); public Thread(Runnable target); public Thread(String name); public Thread

  • java线程并发countdownlatch类使用示例

    复制代码 代码如下: package com.yao; import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; /** * CountDownLatch是个计数器,它有一个初始数, * 等待这个计数器的线程必须等到计数器倒数到零时才可继续. */public class CountDownLatchTe

  • java多线程并发中使用Lockers类将多线程共享资源锁定

    复制代码 代码如下: package com.yao; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.c

  • java线程并发blockingqueue类使用示例

    如果BlockingQueue是满的任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有新的空间才会被唤醒继续操作. BlockingQueue提供的方法主要有: add(anObject): 把anObject加到BlockingQueue里,如果BlockingQueue可以容纳返回true,否则抛出IllegalStateException异常. offer(anObject):把anObject加到BlockingQueue里,如果BlockingQueue

  • java多线程编程之使用Synchronized关键字同步类方法

    复制代码 代码如下: public synchronized void run(){     } 从上面的代码可以看出,只要在void和public之间加上synchronized关键字,就可以使run方法同步,也就是说,对于同一个Java类的对象实例,run方法同时只能被一个线程调用,并当前的run执行完后,才能被其他的线程调用.即使当前线程执行到了run方法中的yield方法,也只是暂停了一下.由于其他线程无法执行run方法,因此,最终还是会由当前的线程来继续执行.先看看下面的代码:sych

  • java 可重启线程及线程池类的设计(详解)

    了解JAVA多线程编程的人都知道,要产生一个线程有两种方法,一是类直接继承Thread类并实现其run()方法:二是类实现Runnable接口并实现其run()方法,然后新建一个以该类为构造方法参数的Thread,类似于如下形式: Thread t=new Thread(myRunnable).而最终使线程启动都是执行Thread类的start()方法. 在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了.此时这个线程对象也便成了无用对象,等待垃圾回收器的回收.下次

随机推荐