Java线程教程:使用Java创建线程和多线程(建议收藏)

394 阅读5分钟

本文灵感来自于优锐课java学习笔记,讨论了关于Java Thread概念的简要介绍,很多人觉得很棘手。get了很多干货分享给大家学习参考。

与许多其他计算机语言不同,Java提供了对多线程的内置支持。 Java中的多线程包含两个或多个可以同时运行的部分。 Java线程实际上是一个轻量级进程。

本文将向你介绍许多人发现棘手或难以理解的所有Java Thread概念。

我将介绍以下主题:

1.什么是Java线程?

2. Java线程模型

3. Java多线程

4. Java主线程

5.如何创建Java线程?


在继续第一个主题之前,请考虑以下示例:

想象一下具有许多复杂功能的股票经纪人应用程序,例如

·1.下载最后的股价

·2.检查价格以获取警告

·3.分析特定公司的历史数据

这些是耗时的功能。在单线程运行时环境中,这些操作将一个接一个地执行。仅当上一个操作完成后,才能执行下一个操作。


如果历史分析需要半小时,并且用户选择执行下载并事后检查,则警告可能来不及买卖股票。这是一种需要多线程处理的应用程序。理想情况下,下载应在后台(即在另一个线程中)进行。这样,其他进程可能会同时发生,从而例如可以立即传达警告。一直以来,用户正在与应用程序的其他部分进行交互。分析也可以在单独的线程中进行,因此用户可以在计算结果的同时使用应用程序的其余部分。

这是Java线程提供帮助的地方。

什么是Java线程?

线程实际上是一个轻量级进程。与许多其他计算机语言不同,Java为多线程编程提供了内置支持。 多线程程序包含两个或多个可以同时运行的部分。 这样的程序的每个部分都称为线程,每个线程定义执行的单独路径。 因此,多线程是多任务的一种特殊形式。

Java线程模型

Java运行时系统在很多方面都依赖于线程。 线程通过防止浪费CPU周期来降低效率。

线程以几种状态存在:

· 运行-Java线程处于运行状态。

· 已暂停-可以暂停正在运行的线程,这将暂时暂停其活动。 然后可以恢复被挂起的线程,使它可以从中断的位置继续。

· 阻止-等待资源时可以阻止Java线程。

· 终止-线程可以终止,这可以在任何给定时间立即停止执行。 线程终止后,将无法恢复。

现在,让我们跳到Java线程最重要的主题:线程类和可运行接口。

Java中的多线程:线程类和可运行接口

Java的多线程系统建立在Thread类,其方法及其配套接口Runnable的基础上。 要创建一个新线程,你的程序将扩展Thread或实现Runnableinterface。hread类定义了几种有助于管理线程的方法:

Method

Meaning

getName

Obtain thread’s name

getPriority

Obtain thread’s priority

isAlive

Determine if a thread is still running

join

Wait for a thread to terminate

run

Entry point for the thread

sleep

Suspend a thread for a period of time

start

Start a thread by calling its run method

现在,让我们看看如何使用以所有Java程序具有的主要Java线程开头的Thread。

Java主线程M

在这里,我将向你展示如何使用Thread and Runnable接口从主要的Java线程开始创建和管理线程。

为什么主线程如此重要?

·因为它影响其他“子”线程。

·因为它执行各种关闭操作。

·因为它是在程序启动时自动创建的。

如何创建Java线程

Java使你可以通过以下两种方式之一创建线程:

·通过实现Runnable接口。

·通过扩展线程。

·让我们看一下这两种方式如何帮助实现Java线程。

让我们看一下这两种方式如何帮助实现Java线程。

可运行的界面

创建线程的最简单方法是创建一个实现Runnable接口的类。

为了实现Runnable接口,一个类仅需要实现一个名为run()的方法,该方法的声明如下:

public void run( )在run()内部,我们将定义构成新线程的代码。 例:

public class MyClass implements Runnable {public void run(){System.out.println("MyClass running");}}

要通过线程执行run()方法,请将MyClass的实例传递给其构造函数中的Thread(Java
中的构造函数是类似于在创建对象实例时调用的方法的代码块)。 这是完成的方式:

Thread t1 = new Thread(new MyClass ());t1.start();

当线程启动时,它将调用MyClass实例的run()方法,而不是执行自己的run()方法。 上面的示例将打印出文本“MyClass running”。

扩展Java线程

创建线程的第二种方法是创建一个扩展Thread的新类,然后重写run()方法,然后创建该类的实例。 调用start()后,线程将执行run()方法。 这是创建Java Thread子类的示例:

public class MyClass extends Thread {public void run(){System.out.println("MyClass running");}}

创建并启动上述线程:

MyClass t1 = new MyClass ();T1.start();

当run()方法执行时,它将打印出文本“MyClass running”。

到目前为止,我们仅使用了两个线程:主线程和一个子线程。但是,我们的程序可以影响所需数量的线程。让我们看看如何创建多个线程。

创建多个线程

class MyThread implements Runnable {String name;Thread t;MyThread String thread){name = threadname;t = new Thread(this, name);System.out.println("New thread: " + t);t.start();}public void run() {try {for(int i = 5; i > 0; i--) {System.out.println(name + ": " + i);Thread.sleep(1000);}}catch (InterruptedException e) {System.out.println(name + "Interrupted");}System.out.println(name + " exiting.");}}class MultiThread {public static void main(String args[]) {new MyThread("One");new MyThread("Two");new NewThread("Three");try {Thread.sleep(10000);} catch (InterruptedException e) {System.out.println("Main thread Interrupted");}System.out.println("Main thread exiting.");}}

该程序的输出如下所示:

New thread: Thread[One,5,main]New thread: Thread[Two,5,main]New thread: Thread[Three,5,main]One: 5Two: 5Three: 5One: 4Two: 4Three: 4One: 3Three: 3Two: 3One: 2Three: 2Two: 2One: 1Three: 1Two: 1One exiting.Two exiting.Three exiting.Main thread exiting.

这就是Java中的多线程工作方式。 希望这对你有所帮助。

文章写到这里,如有不足之处,欢迎评论补充~

抽丝剥茧,一起来细说架构那些事!