学习笔记,转自:http://www.cnblogs.com/heima-jieqi/archive/2012/04/09/2439080.html
用于线程实现的类和接口分别是什么?简单举出使用范例。
Thread类继承和Runnable接口实现:
1)创建线程的第一种方式:继承Thread类。
步骤:
(1),定义类继承Thread。
(2),复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。//run();仅仅是对象调用方法。而线程创建了,并没有运行。
(3),调用线程的start方法,
该方法两个作用:启动线程,调用run方法。
Demo d = new Demo();//创建好一个线程。
//d.start();//开启线程并执行该线程的run方法。
d.run();//仅仅是对象调用方法。而线程创建了,并没有运行。
2)创建线程的第二种方式:实现Runable接口
步骤:
(1),定义类实现Runnable接口
(2),覆盖Runnable接口中的run方法。
将线程要运行的代码存放在该run方法中。
(3),通过Thread类建立线程对象。
(4),将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
(5),调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。
两种方式区别:
继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
class MyThread extends Thread{ // 继承Thread类,作为线程的实现类
private int ticket = 5 ; // 表示一共有5张票
public void run(){ // 覆写run()方法,作为线程 的操作主体
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println("卖票:ticket = " + ticket--) ;
}
}
}
};
public class ThreadDemo0{
public static void main(String args[]){
MyThread mt1 = new MyThread() ; // 实例化对象
MyThread mt2 = new MyThread() ; // 实例化对象
MyThread mt3 = new MyThread() ; // 实例化对象
mt1.run() ; // 调用线程主体
mt2.run() ; // 调用线程主体
mt3.run() ; // 调用线程主体
}
};
class MyThread implements Runnable{ // 继承Thread类,作为线程的实现类
private int ticket = 5 ; // 表示一共有5张票
public void run(){ // 覆写run()方法,作为线程 的操作主体
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println("卖票:ticket = " + ticket--) ;
}
}
}
};
public class RunnableDemo0{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 实例化对象
new Thread(mt).run() ; // 调用线程主体
new Thread(mt).run() ; // 调用线程主体
new Thread(mt).run() ; // 调用线程主体
}
};
简单的来说,就是继承和实现接口的区别。
1、当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,
2、java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了,在其他的方面,两者之间并没什么太大的区别。
3、implement Runnable是面向接口,扩展性等方面比extends Thread好。
4、使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 Thread 来得紧凑。
--------------------------------------------------------------------------------------------------------
1. 如何实现多线程:
继承Thread类或者实现Runnable接口
那种好处多:因为java是单继承所以一般会采用实现Runnable接口
两种实现方式的区别:
继承Thread类可以创建本类对象直接调用start()方法运行线程(也就是说本类对象就是一个线程 个人理解)
实现Runnable接口必须用Thread thread = new Thread()来获得一个线程!
--------------------------------------------------------------------------------------------------------
29. 什么是多线程?线程的状态有那几个?创建线程的方法?启动线程用什么方法?线程同步包括的方法?
答:多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。线程状态有:就绪、运行、挂起、结束。启动线程用start()方法。线程同步包含的方法:线程睡眠sleep()、线程让步:yield()、等待其他线程结束join()等。
--------------------------------------------------------------------------------------------------------
相关推荐
在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...
继承`Thread`类的方法简洁明了,但在Java中不建议过度使用继承,尤其是为了实现多线程的目的。相比之下,实现`Runnable`接口的方式更加灵活,适用于大多数情况,特别是当一个类已经继承了另一个类的情况下。 #### ...
本文将详细讲解如何通过实现`Runnable`接口创建多线程,以及这种方式相较于继承`Thread`类的优势。 一、实现Runnable接口创建多线程 1. **步骤** 当一个类需要继承其他类而不能直接继承`Thread`类时,可以选择...
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...
这两种方法都可以实现阶乘计算的多线程化,主要区别在于继承`Thread`时,线程行为直接与类绑定,而实现`Runnable`接口时,线程行为是通过对象实例传递的。选择哪种方式取决于具体需求和设计考虑,例如是否需要复用类...
在Java编程语言中,创建多线程有两种主要的方法:继承`Thread`类和实现`Runnable`接口。这两种方法都是为了使程序能够同时执行多个任务,从而提高效率和响应性。 **1. 继承Thread类** 当一个类直接继承自`Thread`类...
在 Java 中,创建线程有两种方式:继承 Thread 类和实现 Runnable 接口。这些方式都可以用来创建线程,但它们之间有着一些关键的区别。 继承 Thread 类 继承 Thread 类是 Java 中创建线程的一种方式。这种方式下,...
在Java中,创建多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方式都是为了实现程序的并发执行,即允许多个任务在同一时间片内交替执行。下面我们将详细讨论这两种方法及其区别。 ### 继承...
本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本篇文章将深入探讨通过实现Runnable接口来创建线程的方法,以及这种方式相比于直接继承Thread类的优势。 首先,我们来看Runnable接口。在...
Java提供了多种创建多线程的方式,其中最基础的一种是通过继承Thread类来实现。 一、创建和启动线程 1. 概述 Java虚拟机(JVM)支持多线程执行,每个线程都是通过`java.lang.Thread`类的实例来表示的。创建一个...
在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现方案。 #### 一、继承Thread类 1. **...
本篇文档主要探讨了两种实现Java多线程的数据共享方式:通过内部类和实现Runnable接口。以下是对这两种方法的详细解释: 1. **实现Runnable接口**: - **好处**:Java中的`Runnable`接口允许我们将线程逻辑(run()...
本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...
* Thread2:继承Runnable接口 * * ThreadMethod:一些Thread常见方法 * ThreadTestDome1 练习:创建两个线程 其中一个线程遍历100以内的偶数 另一个遍历一百内奇数 采用第一种 extends来创建线程 * * 卖票...
在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景,理解它们之间的区别对于编写高效、可维护的多线程应用至关重要。 ### 继承...
总之,通过继承`Thread`类创建多线程是Java中一种常见的实现方式,但也有其他方式,比如实现`Runnable`接口或使用`ExecutorService`。每种方法都有其适用场景,开发者应根据需求选择合适的方式。在实际编程中,了解...
Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...
本篇将探讨两种在Java中实现多线程数据共享的方式:通过内部类和实现`Runnable`接口。 首先,让我们来看看如何使用`Runnable`接口实现数据共享。`Runnable`接口是Java提供的一种创建线程的方式,它允许我们将线程的...