zoukankan      html  css  js  c++  java
  • 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("一边喝水");
          }
      }
    }

     

    It's a lonely road!!!
  • 相关阅读:
    C# 把类实例保存到文件里(类的序列化和反序列化)
    C# 枚举的初始化
    旋转 3d
    asp.net页面间传值方式
    sql获取当前时间
    SqlServer中循环和条件语句示例!
    SQL Server 代理(已禁用代理 XP)
    JQuery源码实现
    C#计算一段程序运行时间的三种方法
    java开发配套版本
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14832955.html
Copyright © 2011-2022 走看看