进行并发程序设计,首先必须对多线程有足够的了解。在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中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
分别用Thread类和Runnable接口实现的阶乘的计算过程及结果的显示(本来一开始设置的不要积分,不知道为啥变得需要积分了,故此调整一下)
thread 线程类 实现runnable接口
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
1、Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。 2、多线程是并发执行的,交替占有cpu执行,请编写示例程序,并观察输出结果。 3、采用线程同步方法...
声明自定义线程类实现Runnable接口实现奇数/偶数序列线程并发执行。
在Java中只支持单继承,因此通过继承Thread类创建线程有一定的局限性,这时可以使用另一种方式,即实现Runnable接口来创建线程。通过这种方式需要在Thread(Runnable target)的构造方法中,传递一个实现了Runnable...
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程
基于JAVA的多线程实现方法-实现Runnable接口 将需要实现多线程的类声明为实现Runnable接口的类,实现run()方法,并将线程体放在该方法里。
实现Runnable接口的类必须使用Thread类的实例才能创建线程,通过Runnable接口创建线程分为以下两步
Java多线程--创建多线程的基本方式二:实现Runnable接口
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
Thread和Runnable 的区别在面试当中是比较容易考的,自己又刚好在做这个的实验课题,于是乎,决定好好的学习这一部分知识,并把我查过的资料,通过自己的理解,给大家整理出来。 目录 面向小白学习法——Thread...
声明自定义线程类实现Runnable接口实现奇数/偶数序列线程并发执行。
一个简单的多线程代码示例,Java实现,用于实现同一时刻,只允许一个线程调用执行的代码块或类,即synchronized的如何使用(多线程实现),实现 Runnable
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
1. 什么是Runnable接口: 1.1 介绍Runnable接口 1.2 与Thread类的对比 2. 创建线程的方式: 2.1 继承Thread类 2.2 实现Runnable接口 3. 实现Runnable接口: 3.1 实现步骤 3.2 优点与用途 4. 启动线程: 4.1 使用...
add 实验一:多线程/2.Runnable接口. 实验八:JDBC数据库编程二——存储过程与函数 add 实验八:JDBC数据库编程二——存储过程与函数/2.addTwoNumAndReturn. 实验十:Socket编程 add 实验十:Socket编程/...
实现Runnable接口和继承Thread类两种方式实现在屏幕上随机画正方形线程程序