Java的线程,即一个Thread实例。
Java的线程执行过程有两种实现方式:
1. 子类继承Thread类,并且重写void run()方法。
2. 自定义类实现Runnable接口,并且实现void run()方法。并在Thead构造时,将Runnable实例放入Thead。
一. Thread类
创建一个新线程必须实例化一个Thread对象。
使用方法:
1. 子类继承Thread类。重写Thread的run()方法。
2. 实例化该子类。
3. 执行Thread的start()方法启动一个线程。
例:
public class TestThread1 { public static void main(String args[]) { Runner1 r = new Runner1(); //新建线程。 r.start(); //线程开始执行。 for(int i=0; i<100; i++) { System.out.println("Main Thread:------" + i); } } } class Runner1 extends Thread { //继承Thread类。 public void run() { for(int i=0; i<100; i++) { System.out.println("Runner1 :" + i); } } }
二. Runnable接口
实现Runnable接口需要实现run()方法.run()方法代表线程需要完成的任务.因此把run方法称为线程执行体.
使用方法:
1.类实现Runnable接口,并且实现run()方法。
public class MyRun implements Runnable{
public void run(){
//....mythread
}
}
2.实例化该类。Runnable runnable=new MyRun();
3.把该类注入到Thread对象中,即通过Thread的构造方法注入。Thread thread=new Thread(runnable);
4.调用Thread实例的start()方法。启动线程。thread.start();
例:
public class TestThread1 { public static void main(String args[]) { Runner1 r = new Runner1(); Thread t = new Thread(r); //新建线程。 t.start(); //线程开始执行。 for(int i=0; i<100; i++) { System.out.println("Main Thread:------" + i); } } } class Runner1 implements Runnable { //实现Runnable接口 public void run() { for(int i=0; i<100; i++) { System.out.println("Runner1 :" + i); } } }
三. 两种方式所创建线程的对比
实现Runnable接口方式的多线程:
1.编程稍复杂.
2.如果需要访问当前线程,必须使用Thread.currentThread()方法.
3.线程只是实现了Runnable接口,还可以继承其他类.
4.在这种方式下,可以多个线程共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU,代码,数据分开,形成清晰的模型,较好地体现了面向对象的思想.
继承Thread类方式的多线程:
1.编程简单.
2.如果需要访问当前线程直接使用this.
3.已经继承了Thread类,无法再继承其他父类.
四. Thread的常用API
1. Thread类的构造方法
Thread()
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread(ThreadGroup group, String name)
2. 常用方法
(1) 启动线程
void run() : 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
void start() : 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
(2) 线程状态控制
boolean isAlive()测试线程是否处于活动状态。
int getPriority() 返回线程的优先级。
void setPriority(int newPriority) 更改线程的优先级。
static void sleep(long millis)
static void sleep(long millis, int nanos)
当前线程暂停运行指定的毫秒数(加指定的纳秒数),但此线程不失去已获得的锁旗标.
void join() 等待该线程终止。
void join(long millis) 等待该线程终止的时间最长为 millis 毫秒。
void join(long millis, int nanos) 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
Thread.State getState() 返回该线程的状态。
void interrupt() 中断线程。 调用该方法引发线程抛出InterruptedException异常。
static boolean interrupted() 测试当前线程是否已经中断。
boolean isInterrupted() :测试线程是否已经中断。
(3) 当前线程
static Thread currentThread() : 返回对当前正在执行的线程对象的引用。
String getName() : 返回该线程的名称.
void setName(String name) : 设置线程名称.
void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
boolean isDaemon() :测试该线程是否为守护线程。
String toString() 返回该线程的字符串表示形式,包括线程名称、优先级和线程组。
long getId() 返回该线程的标识符。
void checkAccess() 判定当前运行的线程是否有权修改该线程。
ClassLoader getContextClassLoader() 返回该线程的上下文 ClassLoader。
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 返回线程由于未捕获到异常而突然终止时调用的默认处理程序。
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() 返回该线程由于未捕获到异常而突然终止时调用 的处理程序。
(4) 线程组
static int enumerate(Thread[] tarray) 将当前线程的线程组及其子组中的每一个活动线程复制到指定的数组中。
StackTraceElement[] getStackTrace() 返回一个表示该线程堆栈转储的堆栈跟踪元素数组。
static int activeCount() 返回当前线程的线程组中活动线程的数目。
ThreadGroup getThreadGroup() 返回该线程所属的线程组。
(5) 其他
static Map<Thread,StackTraceElement[]> getAllStackTraces() 返回所有活动线程的堆栈跟踪的一个映射。
相关推荐
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
分别用Thread类和Runnable接口实现的阶乘的计算过程及结果的显示(本来一开始设置的不要积分,不知道为啥变得需要积分了,故此调整一下)
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
1、Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。 2、多线程是并发执行的,交替占有cpu执行,请编写示例程序,并观察输出结果。 3、采用线程同步方法...
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
在Java中只支持单继承,因此通过继承Thread类创建线程有一定的局限性,这时可以使用另一种方式,即实现Runnable接口来创建线程。通过这种方式需要在Thread(Runnable target)的构造方法中,传递一个实现了Runnable...
实现Runnable接口的类必须使用Thread类的实例才能创建线程,通过Runnable接口创建线程分为以下两步
主要介绍了java 多线程Thread与runnable的区别的相关资料,java线程有两种方法继承thread类与实现runnable接口,下面就提供实例帮助大家理解,需要的朋友可以参考下
Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...
java中实现多线程有两种方法:一种是继承Thread类,另一种是实现Runnable接口。
关于java多线程技术的实验 掌握java语言中的多线程编程技巧 掌握Thread类和Runnable接口 掌握java语言中多线程的生命周期 掌握java语言中线程的通信技巧
java application multiThread clock,模拟时钟(AWT程序、Runnable接口),有时、分、秒针 编写一个应用程序,创建三个线程分别显示各自的时间。
但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。下面是一个例子: public class MyThread implements ...
这是一道面试题,创建多线程时,使用继承Thread类和实现Runnable接口有哪些区别呢? 一、Thread 先来看看Thread类和其中的start()方法 class Thread implements Runnable{.....} // 可见,Thread类实现了Runnable...
Java多线程笔记多线程的一些例子 Thread类与Runnable接口概述 同步机制
Java多线程技术允许程序同时执行多个线程,每个线程执行一个独立的任务。这种并发性能够提高程序的性能和资源利用率,使得程序能够同时处理多个任务,从而提高响应速度和吞吐量。 在Java中,实现多线程有几种方式:...
继承Thread类构造线程 实现Runnable接口构造线程
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程
单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...