多线程:创建和开启线程

继承Thread类创建线程

java.lang.Thread类:描述线程的类,我们想要实现多线程程序,第一种方式就是继承这个类。

使用步骤如下:

  • 创建一个类并继承Thread类
  • 在该子类中重写Thread类的run方法,设置线程任务(开启线程要做什么?)

开启线程

首先创建Thread类或者子类对象,然后调用Thread类中的start方法,开启新的线程。底层执行的是Thread类的run方法,从而去执行重写的run方法,执行线程任务。

结果是两个线程并发地运行;当前线程(main线程)和另一个线程(创建的线程,间接执行run 方法)。

//创建一个新的线程
public class ThreadOne extends Thread{
    @Override
    public void run() {
        //线程任务
        for (int i = 0; i < 20; i++) {
            System.out.println("run:"+i);
        }
    }
}

//使用多线程
public class ThreadOneTest {
    public static void main(String[] args) {

        //开启新的线程
        ThreadOne one = new ThreadOne();
        one.start();

        //主线程的内容
        for (int i = 0; i < 20; i++) {
            System.out.println("main:"+i);
        }
    }
}

注意,java是抢占式调度,谁的优先级高先执行谁,如果优先级一样,随机选择一个,所以每次运行的结果顺序可能不一样。

注意:多次启动一个线程是非法的。

这里可以不直接创建子类,直接使用匿名内部类来实现:

多线程的内存图解

多线程的好处:多个线程之间互不影响,在不同的栈空间里。


实现Runnable接口创建线程

创建一个Runnable接口的实现类并重写Runnable接口中的run方法,设置线程任务。

这种创建线程的方式避免了继承的局限性:一旦继承了Thread类就不能再继承其它的类。而实现了Runnable接口,还可以再继承其它的类,还能实现其它的接口,更加灵活。

开启线程

使用Thread的以下构造方法传递Runnable接口的实现类,创建一个Thread对象

再调用Thread中的start方法,自动执行run方法。

注意:这里也可以直接用匿名内部类。

Runnable对象中封装的就是线程要执行的代码。

线程关闭

run方法执行完,线程就关闭了。

发布了70 篇原创文章 · 获赞 1 · 访问量 2279

猜你喜欢

转载自blog.csdn.net/caozp913/article/details/103449898