Java中创建线程的两种方式
创建线程方式一
通过继承
Thread
类来创建并启动多线程
Java使用java.lang.Thread
类代表线程,所有的线程对象都必须是Thread
类或其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。
Java中通过继承Thread类来创建并启动多线程的步骤如下:
- 定义Thread类的子类,并重写该类的
run()
方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体 - 创建Thread子类的实例,即创建了线程对象
- 调用线程对象的start()方法来启动该线程
自定义线程类:
/**
* 自定义线程类
*/
public class MyThread extends Thread {
public MyThread(String name){
super(name);
}
@Override
public void run() {
for(int i = 1; i <= 20; i++){
System.out.println(getName() + " " + i);
}
}
}
测试类:
/**
* 创建线程方式一:
* 1. 创建自定义类继承Thread类
* 2. 重写run方法(run方法就是新的线程要执行的代码)
* 3. 创建自定义类对象(线程对象)
* 4. 调用start方法开启新的线程
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println("main线程开启");
// 创建线程对象
MyThread myThread = new MyThread("线程A");
// 开启新的线程myThread
myThread.start();
// 这个循环在main线程中执行
for (int i = 1; i <= 20; i++) {
System.out.println("mian线程 " + i);
}
}
}
创建线程方式二
通过实现
Runnable
类来创建并启动多线程
采用java.lang.Runnable 也是非常常见的一种,我们只需要重写run方法即可
步骤如下:
- 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体
- 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正
的线程对象 - 调用线程对象的start()方法来启动线程
代码如下:
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 20; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
/**
* 创建线程方式二:
* 1. 定义自定义类实现Runnable接口
* 2. 重写run方法
* 3. 创建自定义对象
* 4. 创建Threed对象的时候,作为构造方法的参数进行传递
* 5. 启动线程start方法
*/
public class Demo02 {
public static void main(String[] args) {
// 创建线程任务对象
MyRunnable myRunnable = new MyRunnable();
// 创建线程对象
Thread t1 = new Thread(myRunnable, "线程A");
Thread t2 = new Thread(myRunnable, "线程B");
// 开启线程
t1.start();
t2.start();
}
}