什么是线程?
线程(Thread)是一个程序内部的一条执行流程。
什么是多线程?
多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)
如何创建多线程:
有两种方法可以创建新的执行线程。 一种是将类声明为Thread的子类。 此子类应覆盖类Thread的run方法。 然后可以分配和启动子类的实例(对象)。
多线程的创建方式一:继承Thread类
1.定义一个子类MyThread继承线程类java.lang.Thread,重写run()方法
2.创建MyThread类的对象
3.调用线程对象的start()方法启动线程(启动后还是执行run方法的)
优点:编码简单
缺点:线程类已经继承Thread,无法继承其他类,不利于功能的扩展。
public class MyThread extends Thread {
// 重写run方法,定义线程执行的任务
@Override
public void run() {
System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行");
}
public static void main(String[] args) {
// 创建线程对象
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
// 设置线程名称
thread1.setName("线程1");
thread2.setName("线程2");
// 启动线程
thread1.start();
thread2.start();
}
}
注意事项
1.启动线程必须是调用start方法,不是调用run方法
直接调用run方法会当成普通方法执行,此时相当于还是单线程执行。
只有调用start方法才是启动一个新的线程执行。
2、不要把主线程任务放在启动子线程之前
多线程的创建方式一:实现Runnable接口创建多线程
步骤:
1.定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法
2.创建MyRunnable任务对象
3.把MyRunnable任务对象交给Thread处理
4.调用线程对象的start()方法启动线程
优点:任务类只是实现接口,可以继续继承其他类、实现其他接口,扩展性强。
缺点:需要多一个Runnable对象。
public class MyRunnable implements Runnable {
// 实现run方法,定义线程执行的任务
@Override
public void run() {
//for循环50次
for (int i = 0; i < 50; i++) {
System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行第"+i+"次");
}
}
public static void main(String[] args) {
// 创建Runnable对象
Runnable myRunnable = new MyRunnable();
// 创建Thread对象,并传入Runnable对象
Thread thread1 = new Thread(myRunnable);
Thread thread2 = new Thread(myRunnable);
// 设置线程名称
thread1.setName("线程1");
thread2.setName("线程2");
// 启动线程
thread1.start();
thread2.start();
}
}
匿名内部类的创建方式:
public class MyRunnable {
// 实现run方法,定义线程执行的任务
public static void main(String[] args) {
// 创建Runnable对象
Runnable myRunnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行第"+i+"次");
}
}
};
// 创建Thread对象,并传入Runnable对象
Thread thread1 = new Thread(myRunnable);
Thread thread2 = new Thread(myRunnable);
// 设置线程名称
thread1.setName("线程1");
thread2.setName("线程2");
// 启动线程
thread1.start();
thread2.start();
}
}
标签:Runnable,run,Thread,start,线程,JAVA,多线程
From: https://www.cnblogs.com/Eduhg/p/18572984