Java 多线程的Thread类和Runnable接口

 

Thread 类

   Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员必须覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用 Thread 的 start() 函数,该函数再调用 run()。下面的代码说明了它的用法:

   创建两个新线程

import java.util.*;

class TimePrinter extends Thread {
  int pauseTime;
  String name;
  public TimePrinter(int x, String n) {
   pauseTime = x;
   name = n;
  }

  public void run() {
   while(true) {
    try {
     System.out.println(name + ":" + new Date(System.currentTimeMillis()));
     Thread.sleep(pauseTime);
    } catch(Exception e) {
     System.out.println(e);
    }
   }
  }

  static public void main(String args[]) {
   TimePrinter tp1 = new TimePrinter(1000, "Fast Guy");
   tp1.start();
   TimePrinter tp2 = new TimePrinter(3000, "Slow Guy");
   tp2.start();
  }
}

   在本例中,我们可以看到一个简单的程序,它按两个不同的时间间隔(1 秒和 3 秒)在屏幕上显示当前时间。这是通过创建两个新线程来完成的,包括 main() 共三个线程。但是,因为有时要作为线程运行的类可能已经是某个类层次的一部分,所以就不能再按这种机制创建线程。虽然在同一个类中可以实现任意数量的接口,但 Java 编程语言只允许一个类有一个父类。同时,某些程序员避免从
Thread 类导出,因为它强加了类层次。对于这种情况,就要 runnable 接口。Runnable 接口只有一个方法,所以更加安全。不会产生恶意的更改。

   Runnable 接口

   此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同。我们可以用 runnable 接口改写前一个示例。(不同的部分用蓝色表示。)

   创建两个新线程而不强加类层次

import java.util.*;

class TimePrinter implements Runnable {
  int pauseTime;
  String name;
  public TimePrinter(int x, String n) {
   pauseTime = x;
   name = n;
  }

  public void run() {
   while(true) {
    try {
     System.out.println(name + ":" + new Date(System.currentTimeMillis()));
     Thread.sleep(pauseTime);
    } catch(Exception e) {
     System.out.println(e);
    }
   }
  }

  static public void main(String args[]) {
   Thread t1 = new Thread(new TimePrinter(1000, "Fast Guy"));
   t1.start();
   Thread t2 = new Thread(new TimePrinter(3000, "Slow Guy"));
   t2.start();
  }
}

   请注意,当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为从 Thread 类继承会强加类层次。

时间: 2024-10-25 21:35:14

Java 多线程的Thread类和Runnable接口的相关文章

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

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

JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口

JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一.Thread 如何在自定义的代码中,自定义一个线程呢? 我们查看API文档,我们要启动一个线程,先实现一个子类, package com.lgl.hellojava; public class MyThread extends Thread { @Override public void run()

多线程——继承Thread 类和实现Runnable 接口的区别

  java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:   首先,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了.   其次,如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享.   通过下面的实例可以清晰的看出两种方式的区别所在. 1.继承Thr

Java多线程--认识多线程(Thread、Runnable)

1.进程与线程 dos系统:单进程.只能有一个程序独自运行,其他程序无法运行. windows系统:多进程.同一时间段上有多个程序同时运行. 2.java的多线程实现 在java中实现多线程可以采用两种方式: 继承Thread类. 实现Runnable接口. 3.Thread类 java.lang包会在程序运行时自动导入,所以不用编写import语句. class MyThread extends Thread{ // 继承Thread类,作为线程的实现类 private String name

java多线程编程之使用thread类创建线程_java

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

Java多线程初学者指南(2):用Thread类创建线程

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

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

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

JAVA学习(九):JAVA多线程编程

本文详细解释JAVA多线程编程,首先对进程和线程做了区别,其次介绍线程的两种实现方式,即继承Thread类和实现Runnable接口,然后讨论了线程常用的方法和优先级,最后介绍了线程的同步和死锁以及线程的生命周期.   1.进程与线程的区别与联系 进程:是应用程序的运行实例,是应用程序的一次动态执行.进程是由进程控制块.程序段和数据段3部分组成的.进程是操作系统进行资源分配的单位. 线程:是进程中的一个实体,其本身依靠程序进行运行,是程序中的顺序控制流,只能使用分配给程序的资源和环境.线程是被系

Java多线程简介

      在多任务操作系统中,多进程实现了多任务的并发执行,进程的多线程实现了进程中代码块(线程)的并发执行.       例如:多进程:我要使用qq聊天,又要使用firefox进行上网,还要进行java编程,这儿进启动了三个进程,实现3我要的三个任务,并且同时执行中.       例如:多线程:当用qq聊天的时候,我们同时和5个人进行聊天,那么有6(qq本身为一个线程)个对应的线程,同时进行处理5人同时聊天.       进程:运行中的程序,或者是执行的一组代码集合.       线程:程序