`

java多线程(创建线程的两种方式)

阅读更多

java多线程(创建线程的两种方式)

        一、什么是线程

线程是一个程序内部顺序控制流

线程和进程

1.       进程:每个进程都有独立的代码数据空间,进程切换开销大

2.       线程:轻量的进程,同一个线程共享代码和数据空间,每个线程有独立运行的栈和程序计数器(PC),线程切换的开销小

3.       在操作系统中能同时运行多个任务(程序)。

4.       同一应用程序多个顺序流同时执行

 

问题:对于单核的CPU,处理多个任务时。并不会同时真正的运两个以上的程序。那么它是怎样做到处理多任务的呢?

解答:实际上是操作系统负责对处理器就是CPU等资源进行分配组织和管理。实际上每一时刻只能做一件事,或者运行某一个程序。由于在操作系统的管理下,CPU的处理功能被以非常小的时间间隔进行划分、进行交替,每一个小的时间间隔我们称为时间片。当时间片到期之后将去执行下一个程序。由于交替的速度非常的快,这样就给人一种同时运行多个应用程序或者同时做多件事的一种感觉。这种情况我们称为并发执行。也就是假的,模拟的,通过快速的交替,表现成在同时做多件事。

 

并行执行才是真正意义上的同一时刻做多个事情,同一个瞬间运行不同的应用程序。这样就要求有多个CPU。支持程序并发运行的操作系统我们称为多任务的操作系统或者说是多进程的操作系统。

 

并发性的工作原理还可以应用在更高的层面上,我们可以在一个应用程序的内部,把它要完成的任务分解为多个更小的子任务以多条齐头并进的线索来并发的执行,这种就称为线程或多线程。

 

二、线程的概念模型

Java语言实现或支持多线程的工作方式。

一个线程必须具备以下三方面的要素才能正常的工作。

1.       虚拟的CPU,由java.lang.Thread类封装和虚拟。

2.       CPU所执行的代码,传递给Thread类的对象。

3.       CPU所处理的数据,传递给Thread类的对象。

 

 

 

三、创建线程

第一种方式:使用Runnable接口创建线程

 

1.       Java的线程是通过java.lang.Thread类来实现。

2.       每个线程都是通过某个特定的Thread对象所对应的run()方法来完成其操作。方法run()称为线程体。

1

public class Thread1{

public static void main(String[] args){

       Runner1 r=new Runner1();//2.创建实现Runnable接口的对象

       Thread t=new Thread(r); //3.创建一个Thread类的对象

       t.start(); //4.启动线程

}

 

}

class Runner1 implements Runnable{//1.Runner1实现Runnable接口

       public void run(){

              for(int i=1;i<20;i++){

                   System.out.println(i);

              }

       }    

}

程序运行的结果是输出119个数字。与在main()方法中直接写for循环是一样的效果。

但实现的原理不一样。

使用线程输出的有两个线程(main()主线程和t子线程),不使用只有一个线程。

创建线程的三个步骤

1.       定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。

2.       创建Runnable接口实现类的对象。

3.       创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)

4.       调用Thread对象的start()方法,启动线程

第二种方式:直接继承Thread类创建对象

 

2

public class Thread2{

public static void main(String[] args){

       Thread t=new Runner2();

       t.start();

}

 

}

class Runner2 extends Thread{

       public void run(){

              for(int i=1;i<20;i++){

                     String s=Thread.currentThread().getName();

                   System.out.println(s+":"+i);

              }

       }    

}

1.首先定义一个类去继承Thread父类,此时Runner2类并没有直接的实现Runnable接口,但其实Thread类在JDK中已经实现了Runnable接口。这样就Runner2类间接的实现了Runnable接口。重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。

 

2.直接创建一个Runner2类的对象,也可以利用多态性,变量t声明为父类的类型。

3.线程t启动,隐含的调用run()方法。

比较两种方式:

a.使用Runnable接口创建线程

1.可以将CPU,代码和数据分开,形成清晰的模型

2.线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法

3.有利于保持程序的设计风格一致

b.直接继承Thread类创建对象

1.Thread子类无法再从其它类继承(java语言的单继承)。

2.编写简单,run()方法的当前对象就是线程对象,可直接操作。

分享到:
评论

相关推荐

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java多线程经典案例

    在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致...

    java 多线程并发实例

    在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。在提供的实例中,我们可能会看到这两种方式的运用。 1. 继承Thread类:通过创建新的Thread子类并重写其run()方法,然后创建该子类的实例并调用...

    java多线程进度条

    创建一个新线程通常有两种方式:继承Thread类并重写run()方法,或者实现Runnable接口并提供run()方法。在run()方法中编写线程执行的代码。 进度条通常由主线程负责显示,而耗时任务则在一个或多个工作线程中执行。...

    多线程两种实现方式Java

    你可以通过运行这些示例来更好地理解和学习Java多线程的概念。例如,它可能包含一个继承`Thread`的类,一个实现`Runnable`的类,以及演示如何启动和管理这些线程的主程序。 总结,理解并熟练掌握Java中的多线程实现...

    Java多线程-对比创建多线程的两种方式

    Java多线程编程中,创建线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。这两种方式虽然都能实现多线程,但它们在实际应用中有着不同的特性和适用场景。 首先,我们来看看继承`Thread`类的方式。这种方式...

    java多线程的两种实现

    在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...

    Java多线程英文版

    ### Java多线程编程知识点详解 #### 一、引言 在现代软件开发中,多线程编程是一项不可或缺的技术,尤其是在高性能和响应性要求较高的应用中。Java作为一种广泛使用的编程语言,提供了强大的多线程支持。本文将...

    在Java中创建线程有两种方法

    Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当你选择继承`Thread`类时,你需要创建一个新的类,该类直接...

    Java多线程技术精讲

    创建Java线程主要有两种方式:继承Thread类和实现Runnable接口。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要提供一个包含业务逻辑的run()方法,并通过构造Thread对象传入该Runnable实例。后者更为...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程练习题

    在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者来说都至关重要。 一、线程的创建与启动 1. 继承Thread类:创建一个新的类,该类继承自Thread...

    Java 多线程 PPT

    创建Java线程主要有两种方式: 1. 继承Thread类:创建Thread的子类并重写run()方法,然后通过调用start()方法启动线程。 2. 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()方法,然后将该类的实例...

    武汉理工大学Java多线程实验源码

    在Java中,线程的创建主要有两种方式:通过实现Runnable接口和继承Thread类。实验中可能涵盖了这两种方法,让学生了解它们的区别和适用场景。实现Runnable接口更有利于代码的复用,而继承Thread类则可以直接重写run...

    java 多线程示例

    Java提供了两种创建线程的方式:继承`Thread`类和实现`Runnable`接口。在`lec22`中,可能会包含这两个方法的示例。继承`Thread`类时,重写`run()`方法,并直接通过`start()`启动新线程。而实现`Runnable`接口则需要...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    - **线程的创建**:Java提供了两种创建线程的方式,一是通过实现`Runnable`接口,二是继承`Thread`类。每种方式都有其适用场景,需要根据实际需求选择。 - **生命周期**:线程有新建、就绪、运行、阻塞和终止五种...

    java用线程两种方式

    在Java中,创建和使用线程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式在使用上有一些区别,每种...掌握这两种方式,以及它们在并发编程中的应用,对于编写有效的多线程程序至关重要。

    Java多线程下载器

    Java提供两种方式创建线程:继承Thread类或实现Runnable接口。线程间的协作可以通过同步机制来确保数据的一致性。 2. **并发控制**:在多线程下载中,我们需要管理这些线程,防止它们相互干扰。Java提供了多种并发...

    Java多线程编程

    创建一个新的线程通常有两种方式:一是继承`Thread`类并重写`run()`方法,二是实现`Runnable`接口并提供`run()`方法,然后将实现类的实例传给`Thread`类的构造函数。通过调用`start()`方法启动线程,它会自动调用`...

Global site tag (gtag.js) - Google Analytics