`

Java多线程 Thread类 和 Runnable接口

 
阅读更多

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接口创建多线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。

    thread 线程类 实现runnable接口

    "Thread 线程类实现 Runnable 接口" Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。...开发者可以使用 Thread 类来创建和管理线程,以实现多线程编程。

    【java学习记录】11.多线程实现阶乘计算(Thread类和Runnable接口)

    总结来说,Java中的`Thread`类和`Runnable`接口提供了两种创建多线程的方式,它们都可用于实现阶乘计算。理解这些基础概念是进行并发编程的关键,也是提升程序效率的重要手段。在实际应用中,应根据项目需求和最佳...

    java多线程、通信机制、Thread类以及Runnable接口间的使用实例

    1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。

    Java多线程技术 线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口

    ### Java多线程技术详解 #### 一、引言 多线程编程是现代软件开发中不可或缺的一部分,尤其是在Java这样的面向对象编程语言中尤为重要。Java提供了丰富的API支持多线程编程,使得开发者能够轻松地创建复杂的并发...

    实现Runnable接口创建多线程.docx

    在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接...不过,理解基本的`Runnable`接口实现是掌握Java多线程编程的基础。

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...

    java线程_Thread_Runnable

    Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...

    Java多线程-创建多线程的基本方式二:实现Runnable接口

    总结,实现`Runnable`接口是创建Java多线程的一种常见方式,它提供了更大的灵活性,尤其是在需要多继承或者线程之间需要共享数据的情况下。掌握这两种创建线程的方法,并了解其适用场景,对于编写高效的并发程序至关...

    java 多线程Thread与runnable的区别

    在 Java 中,实现多线程有两种方法:继承 Thread 类和实现 Runnable 接口。在本文中,我们将对这两种方法进行详细的介绍和对比。 继承 Thread 类 继承 Thread 类是 Java 中最基本的多线程实现方法。 Thread 类提供...

    javad多线程

    在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要很长时间来执行,那么整个程序将被阻塞,无法响应用户的其他请求。使用多线程编程可以...

    Java中继承thread类与实现Runnable接口的比较

    在 Java 中,创建线程有两种方式:继承 Thread 类和实现 Runnable 接口。这些方式都可以用来创建线程,但它们之间有着一些关键的区别。 继承 Thread 类 继承 Thread 类是 Java 中创建线程的一种方式。这种方式下,...

    java多线程Runnable实例

    `Runnable`接口是Java实现多线程的一种方式,通过实现`Runnable`接口并创建`Thread`对象,可以轻松地创建并运行多线程。`TestRunnable.java`文件展示了这一过程,同时也提醒我们在实际开发中要注意线程同步和通信,...

    java多线程编程之使用runnable接口创建线程

    总的来说,使用`Runnable`接口创建线程是Java多线程编程中的基础操作,它提供了多线程的灵活性,同时也允许我们更好地管理和控制线程的行为。通过理解这个过程,开发者可以构建更加复杂的并发系统,处理多任务并行,...

    java多线程的讲解和实战

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

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    JAVA 多线程的PPT和示例

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。这份"JAVA多线程的PPT和示例...

    java多线程Demo

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

Global site tag (gtag.js) - Google Analytics