进行并发程序设计,首先必须对多线程有足够的了解。在JAVA语言中,多线程通常通过Thread类和Runnable接口来实现。本文就总结它们的使用。
1、Thread类
在JAVA APIDOCS中,Thread类有这样一段话:
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:
调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。
创建线程时,必须使用该类。该类封装了线程的行为。
2、Runnable接口
API中的解释是:
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。
这段解释已经将Runnable的作用说的十分清楚了。
3、创建、启动线程及注意事项
(1)JAVA中创建线程有两种方式:
1)通过继承Thread类,通常应该重写其run方法,将线程运行的逻辑放在其中。因为Thread中的run方法是一个空实现。
2)通过实现Runnable接口,然后通过实例化一个Thread实例并将自身作为运行目标。
那么在使用中,应该使用那种方式呢?当然使用哪种方式都行,然而在Runnable接口API文档中已经详细地说明该如何选择这两种方式:大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。
在第二种方式中,经常会使用内部类的方式来使用。
(2)启动线程
因为run方法是不能显示调用的,启动一个线程不是调用run方法,而是调用Thread类的start方法。
启动线程大概有以下五种方式:(来自温绍锦(昵称:温少):http//www.cnblogs.com/jobs/)
当然提供名称并非必须的,因为如果不指定名称,系统会自动生成一个名称,自动生成的名称的形式为 "Thread-"+n,其中的 n 为整数。
4、重要方法的使用与说明
Thread类中,有些方法会经常使用到,除了run、start等方法外,sleep、join、interrupt、isInterrupted、interrupted(静态方法)以及从Object类继承下来的wait、notify、notifyAll等方法也经常被使用。对于sleep、join和wait,需要注意的是什么时候抛出InterruptedException异常以及如何处理该异常,这些都与中断(interrupt)有关,将在下一篇文章(第二篇 多线程的使用——中断处理)中与其他几个与中断有关的方法一起介绍。
另外需要注意的是,resume、stop、suspend等方法已经被废除,不建议使用,建议使用信号量(共享变量)或interrupt方法来代替stop方法等。详细参见API文档,Thread类相应的方法说明。http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/index.html
另外currentThread方法通常用于在run方法中获取当前线程对象(即执行该run方法的线程对象)。
- 大小: 71.9 KB
分享到:
相关推荐
Java 程序天生就是多线程的,main 方法开始执行后,按照既定的代码逻辑执行,看似没有其他线程参与,但实际上 Java 程序天生就是多线程程序,因为执行 main 方法的是一个名称为 main 的线程。 Java 中的线程可以...
在Java中,多线程编程技术是通过Thread类和Runnable接口来实现的。Thread类是Java语言中最基本的线程类,它提供了线程的基本操作,而Runnable接口则提供了线程的执行体。 Java多线程编程技术的生命周期包括五个状态...
单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...
总结来说,通过学习"第13章龟兔赛跑——多线程",我们可以掌握Java中多线程的基本概念、创建和管理,以及如何利用多线程提高程序效率。理解并熟练应用这些知识对于开发高效、响应迅速的软件至关重要。
1. **继承Thread类**:创建一个新的类,继承自java.lang.Thread,重写run()方法,在run()中编写线程执行的代码。然后,通过创建Thread子类的实例并调用start()方法启动线程。 2. **实现Runnable接口**:创建一个实现...
1. **Java 多线程基础**:Java通过两种方式支持多线程——继承Thread类和实现Runnable接口。继承Thread类可以直接创建一个新的线程类,而实现Runnable接口则可以在任何对象中添加线程行为,这更符合面向对象设计原则...
如果一个类需要继承其他类,就不能再继承`Thread`,此时可以选择实现`Runnable`接口。`Eraser`类实现了`Runnable`接口,同样重写了`run()`方法。创建线程时,`Runnable`对象作为参数传递给`Thread`类的构造函数: `...
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
2. **Runnable接口**:另一种创建线程的方式是实现`java.lang.Runnable`接口,将`run()`方法放入实现类中,然后将实例传递给`Thread`类的构造函数。 3. **守护线程和用户线程**:Java区分两种类型的线程——用户...
《Java线程——第三版》是一本专注于Java多线程编程的专业书籍,旨在帮助开发者深入理解和熟练掌握Java中的并发处理技术。多线程是现代软件开发中的重要概念,尤其是在服务器端应用、分布式系统以及高性能计算等领域...
- Java语言原生支持线程,是主流编程语言中第一个将线程显式包含在语言本身中的。Java中的线程有时也称为轻量级进程。 - 在Java程序中,至少存在一个线程——主线程。主线程由JVM创建并调用main()方法。除此之外,...
本课件聚焦于Java SE中的一个重要概念——多线程,这是理解并发编程的基础,对于任何Java开发者来说都至关重要。 多线程在Java中是一个核心特性,它允许程序同时执行多个独立的执行路径,从而提高了应用程序的效率...
这个项目是一个基于Java编程语言实现的聊天程序,它涵盖了网络通信中的两种主要协议——用户数据报协议(UDP)和传输控制协议(TCP),同时利用了多线程技术来提高程序的并发处理能力。在Java中,网络通信主要依赖于...
首先,我们需要创建一个`PrimeThread`类,它是实现了`Runnable`接口或继承了`Thread`类的线程类。在这个类中,我们将定义一个方法用于检查给定数字是否为素数。这里可能包含一个循环,用于尝试除以2到该数字平方根的...
Java中的多线程支持主要通过两种方式实现:继承`Thread`类和实现`Runnable`接口。继承`Thread`类可以直接创建一个新的线程类,而实现`Runnable`接口则更灵活,可以将`Runnable`对象作为参数传递给`Thread`类的构造器...
1. **创建线程**:使用`Thread`类的构造函数创建线程,或者实现`Runnable`接口,然后将其实例传递给`Thread`类,实现线程的启动。 2. **线程生命周期**:了解线程的五种状态——新建、就绪、运行、阻塞和终止,并...
1. **线程的创建**:在Java中,有两种主要的线程创建方式——继承Thread类和实现Runnable接口。每种方法各有优缺点,需要根据实际需求选择。 2. **线程的启动与生命周期**:通过调用start()方法启动线程,线程将...
10. **多线程**:Java支持多线程编程,可以使用Thread类或Runnable接口创建线程。理解线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和ReentrantLock类。 11. **网络编程**...