- 1、多线程概述
- 2、线程的创建和启动
- 2.1、单线程程序
- 2.2、创建新线程
- 2.2.1、将类定义为java.lang.Thread类的子类并重写run方法
- 2.2.2、实现定义Java.lang.Runnable接口类
- 2.3、创建线程方式的选择
- 2.4、启动线程
- 2.3、线程的状态及转换
- 大型应用程序都需要高效地完成大量任务,其中使用多线程技术就是一个提高效率的,重要途径。
- 程序——>进程——>线程
- 在Java语言中,也可以开发多线的程序。
先看一段单线程程序
package Therad;
public class Therad01 {
public void a(){
System.out.println("这里是a");
}
public void b(){
System.out.println("这是b方法");
}
public static void main(String[] args) {
System.out.println("main方法开始执行");
Therad01 t1= new Therad01();
t1.a();
t1.b();
System.out.println("main方法运行完毕");
}
}
运行结果
运行流程
- 当运行这个类时,JVM会启动一个线程;将main()方法放在这个线程执行空间的最开始处。该线程会从程序入口main()方法开始。每行代码逐一调用执行。
- 这种只有一条执行路径顺序执行的程序就是单线程程序。运行main()方法的线程通常称为主线程。
- JVM允许一个应用程序在执行时可以同时运行多个线程,通过java.lang.Thread类来实现。
- 每个线程都是通过某个特定Thread对象的run()方法来完成操作的。经常会把run()方法体称为线程体。
- 通过调用Thread对象的start()方法来启动这个线程。
- Java语言中提供了两种创建新线程的方式。
- java.lang.Thread类代表线程类,它提供了一个run方法,run方法体中放置的是准备线程中执行的代码,此方法的方法体中目前没有代码。因此,自定义的线程需要继承Thread类并重写run方法。
- 代码如下
public MyThread extends Thread{
public void run(){
//需要在线程中执行的代码
System.out.println("Helloworld");
}
}
- 定义好线程类后,创建一个新线程就只需要创建出改类的一个实例就可以了,代码如下:Thread mythread = new MyThread();
- java.lang.Runnable接口声明了可以先线程中运行的类所具有的功能。Runable接口只定义了一个run方法代表线程体,记准备在线程中执行的代码应该放置到这个方法中。
- 代码如下
public MyRunnable implements Runnable{
//实现Runnable接口
public void run(){
//要在线程中执行的代码
System.out.println("一曲肝肠断,天涯何处觅知音");
}
}
- 定义好这个可以在线程中运行的类之后,只需要把它的实例作为参数传入Thread类的构造方法中,就可以创建出一个新线程。
- 代码如下
MyRunnable mr = new MyRunnable(); Thread t1 = new Therad(mr);2.3、创建线程方式的选择
- 选择创建的方式时,一般都建议使用第二种方式,既采用实现Runnable接口的方式。一是可以避免由于Java单一继承带来的局限;二是可以将同一个Runnable工作放入不同的线程中运行,实现不同线程共享相同的变量资源。例如,多个火车售票网点可以出售同一车次的车票。
- 要手动启动一个新线程,只需要调用Therad实例的start方法即可。
- 例如:
mythread.start(); t1.start();
运行流程
- 一个线程从它的创建到销毁的过程中,会经历不同的状态。线程状态之间也会随着一些事件的发生转换。
- 一个线程创建之后,它总是处于其生命周期的6种状态之一。
- NEW:至今尚未启动的线程处于这种状态。称为“新建”状态。
- RUNNABLE:正在Java虚拟机中执行的线程处于这种状态。称为“可运行”状态。
- BLOCKED:受阻塞并等待某个监视器锁的线程处于这种状态。称为“阻塞”状态。
- WAITING:无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。称为“等待”状态。
- TIMED_WAITING:等待另一个线程来执行取决于指定等待事件的操作的线程处于这种状态。称为“超时等待”状态。
- TERMINATED:已退出的线程处于这种状态。称为“中止”状态。



