Java教程

5.31Java多线程继承

本文主要是介绍5.31Java多线程继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

5.31Java多线程继承

Java当中创建多线程的方法--->对应的api

  • 继承Thread类,重写run方法--->重点掌握

  • 实现Runnable接口,重写run方法--->重点掌握

  • 实现Callable接口,重写call方法--->JUC并发包下的


少用继承,多用实现。因为Java当中是只有单继承--->实现了Runable接口只要实现了就具备了多线程的能力

Thread类api分析

  • 继承了Object类,实现了Runnable接口

  • Runnable类特点:

    • 由任何类实现、实例将由线程执行

    • 必须定义一个无参数的方法,run--->必须重写run方法

  • 每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。

  • 优先级较高的不一定代表一定会被执行,只是优先级较高的cpu可能分配的概率会大一些

  • 线程分类

    • 用户线程--->程序必须等待它执行完毕后才能停下

    • 守护线程--->可以不必等待线程执行完毕就可以停止

    • 默认情况下每个线程都是用户线程

创建一个新执行的线程的方法

将一个类声明为Thread的子类,这个子类应该重写成run类的方法Thread。然后可以分配并启动子类的实例。

class PrimeThread extends Thread{
    long minPrime;
    PrimeThread(long minPrime){
        this.minPrime = minPrime;
    }
    
    /*必须重写run方法,因为Threa类也实现了Runnable接口*/
    public void  run(){
        //方法体,如果没有就是一个空线程
        ...
    }
}

创建好了线程以后需要去启动它:

/*通过构造器创建对象,调用提供好的start方法*/
PrimeThread p = new PrimeThread(143);
p.start();
//strat方法是交给cpu什么时候去调用。Thread类写好了这个方法

第二个是声明一个实现Runnable接口的类。实现run方法

class PrimeThread implements Runnable{
    long minPrime;
    PrimeThread(long minPrime){
        this.minPrime = minPrime;
    }
    
    /*必须重写run方法,因为Threa类也实现了Runnable接口*/
    public void  run(){
        //方法体,如果没有就是一个空线程
        ...
    }
}

因为只是实现了接口,所以没有Thread类当中的start方法直接交给cpu去安排,所以要new一个Thread对象

PrimeRun p = new PrimeRun(143); //真实对象
new Thread(p).start(); //Thread对象称为目标对象

Thread的构造器够线程组的构造器

现阶段重点关注的方法
  • start方法

  • run方法

多线程实例

package iostudy.thread;
​
/**
 * 创建线程:
 * 1、通过继承Thread类,重写run方法创建
 * 2、创建子类对象 + start方法启动
 */
public class StartThread extends Thread{
​
    /**
     * 线程入口点
     */
    @Override
    public void run(){
        super.run();
        /*
        线程入口点进入了之后称为线程体
        写代码
        写方法的调用
         */
        for (int i = 0; i < 20; i++){
            System.out.println("一边吃饭");
            /*这是一个线程*/
        }
    }
​
    public static void main(String[] args) {
        /*启动线程的方法*/
        //创建子类对象--->子类是指继承了Thread类的子类
        StartThread st = new StartThread(); //从main方法进入,创建一个对象
        /*使用父类的start方法*/
        st.start(); //调用了start方法,开启一个线程交给cpu去调用。这个程序会直接往下运行不会等待start方法执行完毕
        /*这个线程一启动直接有了*/
        for (int i = 0; i < 20; i++){
            System.out.println("一边喝水");
        }
    }
}

 

这篇关于5.31Java多线程继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!