Java多线程(5)

1.概念
  • 线程是一个程序内部的顺序控制流
//线程和进程的区别
每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销
线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立运行的栈和程序计数器(PC),线程切换的开销小
多进程:在操作中系统中能同时运行多个任务(程序)
多线程:在统一应用程序中有多个顺序流同时执行
  • java的线程是通过java.lang.Thread类来实现的
  • vm启动时会有一个由主方法(public static void main(){})所定义的线程。
  • 可以通过创建Thread的实例来创建新的线程。
  • 每个线程都是通过某个特定的Thread对象对应的方法run()来完成其操作的,方法run()成为线程体
  • 通过调用Thread类的start()方法来启动一个线程。
//实例
Public class{
  public static void main(Sring[] args){
    mi();
  }
Public static void m1(){
  m2();
  m3();
}
Public static void m2(){}
Public static void m3(){
}
  • 此程序执行的路径有几条?
  • 1条,每一个分支是一个线程,main是主分支
    这里写图片描述
2.线程的创建和启动
//方法1:
*定义线程类实现Runnable接口
//target为Runnable接口类型
*Thread myThread = new Thead(target) 
*Runnable中只有一个方法:public void run();用来定义线程运行实体
*使用Runnable接口可以为多个线程提供共享数据。
*在实现Runnable接口中的类的run方法定义中可以使用Thread的静态方法(public static Thread currentThread()获取当前线程引用)

//方法2:
*定义一个Thread的子类并重写其run方法
class MyThread extends Thead{
   public void run(){...}
}
*然后生成该类的对象
MyThread MyThread = new MyThread(...)
public class TestThread1{
  public static void main(String args){
     Runner1 r = new Runner1();
     Thread t = new Thread(r);
     //main方法运行到此处产生一个分支Runnable与main并行运行
     t.start();
     for(int i = 0;i<100;i++){
       System.out.println("Main Thread:----"+i);
     }
  }
}
class Runner1 implements Runnable{
  public void run(){
     for(int i = 0;i<100;i++){
       System.out.println("Runner1:"+1);
     }
  }
}
//线程启动必须调用thread类的start方法

结果:
这里写图片描述

public class TestThread1{
  public static void main(String args){
     Runner1 r = new Runner1();
     r.run();

     for(int i = 0;i<100;i++){
       System.out.println("Main Thread:----"+i);
     }
  }
}

直接调用run方法运行结果:
这里写图片描述

线程启动方法2
这里写图片描述
结果:
这里写图片描述

3.小结
  • 两种方式启动线程(从thread继承,实现runnable接口)
  • 从thread继承,比较死,从这个类继承了以后就不能从其他的类继承了。接口比较灵活。
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/lyj4495673/article/details/80962484