欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java多线程编程之Thread类实现多线程

程序员文章站 2022-05-05 22:03:18
...

继承Thread类,覆写run方法

java中实现多线程的定义,要实现特定的接口或者继承特定的父类。

class MyThread extends  Thread{
    private String title;
    public MyThread(){
        this.title = title;
    }
    @Override
    public void run() {
        for (int i=0;i<10;i++){
            System.out.println(this.title+"运行,i="+i);
        }
    }
}

多线程要执行的功能都在run方法中进行定义。但是要注意的是run方法不能被直接调用,涉及到操作系统资源调度问题,所以要想启动多线程必须使用start()方法

public class ThreadDemo {
    public static void main(String[] args) {
        new MyThread("线程A").run();
        new MyThread("线程B").run();
        new MyThread("线程C").run();
    }
}

运行结果为:
java多线程编程之Thread类实现多线程
可以看出为顺序执行,因为执行的没有通过start启动多线程。如果换成如下代码:

public class ThreadDemo {
    public static void main(String[] args) {
        new MyThread("线程A").start();
        new MyThread("线程B").start();
        new MyThread("线程C").start();
    }
}

则运行结果为:
java多线程编程之Thread类实现多线程
虽然执行的是start方法,但最终执行的是run方法,并且所有的线程对象都是交替执行的,执行顺序不可控。
但是为什么不直接执行run方法,而要通过Thread类的start方法呢?
查看start方法源代码:

 public synchronized void start() {
       
        if (threadStatus != 0)   //判断线程的状态
            throw new IllegalThreadStateException(); //抛出了一个异常
        group.add(this);
        boolean started = false;
        try {
            start0();  //调用start0方法
            started = true; 
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
               
            }
        }
    }
      private native void start0();  //只定义了方法名称,没有实现
      //start0声明为native,表明需要将此方法依赖于不同的操作系统实现

start方法里面抛出了一个异常IllegalThreadStateException异常类对象,但是程序中并没有throws和try…catch处理,因为该异常一定是RuntimeException的子类,每一个线程类的对象只允许启动一次,如果重复启动就会抛出异常。例如下面代码:

public class ThreadDemo {
    public static void main(String[] args) {
      MyThread mt =   new MyThread("线程A");
      mt.start();
      mt.start();   //重复进行了线程的启动
    }
}

java多线程编程之Thread类实现多线程
Thread的执行分析:
java多线程编程之Thread类实现多线程
任何情况下,只要定义了多线程,多线程的启动方案只有一种,就是Thread类中的start方法。

相关标签: java 多线程