创建多线程的五种方法
一、第一种创建线程方法
1、继承Thread类
class 类名 extends Thread {
代码....
}
2、重写run方法(run中的逻辑,就是这个线程要执行的工作,直接调用run方法不会创建新的线程)
@Override
public void run() {
代码.....
}
3、创建类的对象,并调用start方法(调用start方法时,才创建了一个新的线程,新的线程执行run里面的逻辑,run里面的逻辑执行完,线程就结束了)
类名 对象名 = new 类名();
对象名.start();
二、第二种创建线程方法
1、实现Runnable接口
class 类名 implements Runnable {
代码....
}
2、重写run方法(run中的逻辑,就是这个线程要执行的工作)
@Override
public void run() {
代码.....
}
3、创建对象,并调用start方法(调用start方法时,才创建了一个新的线程,新的线程执行run里面的逻辑,run里面的逻辑执行完,线程就结束了)
类名 对象名1 = new 类名();
Thread 对象名2 = new Thread(对象名1);
对象名2.start();
三、使用匿名内部类创建线程方法(Thread类版)
1、创建匿名内部类并重写run方法
Thread 对象名 = new Thread() {
@Override
public void run() {
代码.....
}
};
2、调用start方法
对象名.start();
四、使用匿名内部类创建线程方法(Runnable接口版)
1、创建匿名内部类并重写run方法
Thread 对象名 = new Thread(new Runnable( ) {
@Override
public void run() {
代码.....
}
});
2、调用start方法
对象名.start();
五、使用Lambda表达式创建线程方法
1、使用Lambda表达式创建对象
Thread 对象名 = new Thread( ( ) -> {
代码.....
});
2、调用start方法
对象名.start();
线程起别名
创建线程时,给线程起名字
我们可以在创建线程的时候,给线程起一个名字,目的就是为了程序员方便调试
如果不手动起名字,JVM会按照Thread-0、Thread-1.....这样的方式起名字
Thread 对象名 = new Thread(Runnable对象,字符串名字);
线程阻塞(线程等待)
使用join方法达到线程阻塞(线程等待)的效果
使主线程阻塞/等待 调用join的线程执行结束后 主线程才能再继续执行
写法:线程对象名.join();
写法:线程对象名.join(毫秒); //只线程阻塞x毫秒(1000毫秒等于1秒)
获取当前线程的所对应的Thread对象
currentThread方法是Thread的静态方法,通过这个方法可以拿到当前线程的Thread对象
写法:Thread.currentThread();
休眠当前线程
指定线程的休眠时间,让线程阻塞一会(休息一会),单位是毫秒,1000毫秒等于1秒
写法:Thread.sleep(毫秒);