1.创建多线程的第一种方式
- 创建一个
Thread
子类 - 子类中重写
run
方法,设置线程任务 - 主程序中创建
Thread
的子类对象 - 调用
Thread
中的star
方法,开启多线程
线程1:
public class Thread01 extends Thread {
@Override
public void run() {
for (int i = 0; i <3; i++) {
System.out.println("线程1");
}
}
}
线程2:
public class Thread02 extends Thread {
@Override
public void run() {
for (int i = 0; i <3; i++) {
System.out.println("线程2");
}
}
}
主程序:
public class Demo01Thread {
public static void main(String[] args) {
Thread thread01 = new Thread01();
Thread thread02 = new Thread02();
thread01.start();
thread02.start();
}
}
检验多线程的好处:一个线程停止不会影响其他线程
import java.util.Objects;
public class Thread01 extends Thread {
@Override
public void run() {
Objects.requireNonNull(null);
for (int i = 0; i <3; i++) {
System.out.println("线程1");
}
}
}
2.多线程的运行原理
3.多线程内存图解
4.Thread
类中常用方法
- 获取线程名称
getName()
currentThread()
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(getName());
}
}
public class Demo01 {
public static void main(String[] args) {
Thread one = new MyThread();
one.start();
}
}
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(currentThread().getName());
}
}
public class Demo01 {
public static void main(String[] args) {
new MyThread().start();
new MyThread().start();
new MyThread().start();
}
}
- 设置线程名称
setName()
- 子类中创建带参构造方法
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(currentThread().getName());
}
}
public class Demo01 {
public static void main(String[] args) {
Thread one = new MyThread();
one.setName("线程1");
one.start();
}
}
public class MyThread extends Thread {
public MyThread(String name) {
super(name);
}
@Override
public void run() {
System.out.println(currentThread().getName());
}
}
public class Demo01 {
public static void main(String[] args) {
Thread one = new MyThread("线程2");
one.start();
}
}
- 正在执行的线程暂停指定毫秒数
sleep
public class Demo03 {
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i <30; i++) {
System.out.println(i);
Thread.sleep(1000);
}
}
}
5.创建多线程的第二种方式
- 步骤
- 创建一个
Runnable
接口的实现类 - 在实现类中重写
Runnable
接口的run()
方法 - 主程序中创建一个
Runnable
接口的实现类对象 - 创建
Thread
类对象,构造方法中放入Runnable
接口的实现类对象 - 调用
Thread
中的star
方法,开启多线程
public class ImpRunnable01 implements Runnable {
@Override
public void run() {
for (int i = 0; i <3; i++) {
System.out.println(Thread.currentThread().getName()+"--->"+i);
}
}
}
public class DemoRunnable {
public static void main(String[] args) {
Runnable run = new ImpRunnable01();
Thread one = new Thread(run);
Thread two = new Thread(run);
one.start();
two.start();
}
}
- 优点
6.匿名内部类实现多线程的创建(程序的简化)
public class Demo04 {
public static void main(String[] args) {
Thread one = new Thread(){
@Override
public void run() {
for (int i = 0; i <4; i++) {
System.out.println(getName()+"--->"+i);
}
}
};
one.start();
}
}
public class Demo05 {
public static void main(String[] args) {
Runnable one = new Runnable() {
@Override
public void run() {
for (int i = 0; i <4; i++) {
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
};
new Thread(one).start();
}
}