极客云曦 2021-05-21 18:04 采纳率: 33.3%
浏览 64
已采纳

什么是java多线程?

如何创建一个线程的生命周期?

如何通过 Runnable创建多线程接口?

  • 写回答

4条回答 默认 最新

  • 五叨鱼 2021-05-21 20:50
    关注

    多线程有三个特点-----了解线程的工作流程

    1.随机性:同一时刻只有一个线程在执行;cpu的快速切换导致认为有多个线程在同时执行。

    2.CPU分时调度:CPU分配给每个线程一个时间片。

        eg:比如说,每个线程只能执行2秒,那么2秒后,就会切换下一个线程执行2秒。线程时间不足2秒的就提前终止,超过2秒的就下一次分配到了执行。

      2.1 OS底层算法决定线程的执行顺序:FCFS(先来先执行,执行不完下一次)算法,SJS(第一次没执行完就下一次)

    3.线程的状态:5个,新建、就绪、执行、阻塞、终止

       3.1 线程新建会先去申请PCB,分配资源,将其转化为就绪状态插入到队列中,准备执行 

       3.2 线程只有 就绪 才会分配CPU去执行,执行过程因为一些原因会导致程序阻塞,阻塞后需要就绪才能继续执行。

       3.3 执行完后就会终止

    **线程启动的方式:启动线程的唯一方法就是通过Thread类的start()实例方法(API手册搜Thread,有两种方法的介绍和代码)。

      线程跑起来的方法是run(),调用Thread类的static()方法时,会自动调用run()。

    多线程的创建有两种方式:

    1. 建立一个子类,继承Thread类,然后重写run()方法,创建子类对象,调用Thread的static()方法,实现线程的启动。

       多线程,就是创建多个对象,都调用static()方法,就是多线程的实现。

       Thread.currentThread()获取当前的线程对象
     

    package Tread;
    /*方法一*/
    public class Tread01 {
        public static void main(String[] args) {
            Student a=new Student();
            Student b=new Student();
            Student c=new Student();
            a.start();
            b.start();
            c.start();
        }
    }
    class Student extends Thread{
        public void run() {
          for (int i=0;i<10;i++){
              System.out.println(i+"="+Thread.currentThread());
          }
    
        }
    }
    

    2.通过接口Runnable的run()方法,实现run()方法的重写(run()里放的就是你需要执行的功能代码),

      Thread(Rannable)方法将接口的实力类与Thread对接,再创建多个对象执行。

     

      

    package Tread;
    /*方法二*/
    public class Thread02 {
        public static void main(String[] args) {
            Son a=new Son();
            Thread b=new Thread(a);
            
    
    
        }
    }
    class  Son  implements Runnable{
        @Override
        public void run() {
            for(int i=0;i<10;i++){
                System.out.println(i+Thread.currentThread().getName());
            }
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办