java中的多线程

程序:就是指我们写的保存在硬盘当中的静态文件

进程:程序代码在没有被调用之前都是以静态文件方式保存在硬盘中,我们调用的时候就会从硬盘中载入到内存中,这个时候就认为开启了一个进程.只要程序加载了就会在操作系统中注册一个进程号(PID).进程是一个操作系统的概念.

线程:当程序开始执行的时候就是javamain()方法开始执行,在栈内存中开辟main()栈帧的时候就是开启了一个线程.一个线程就是一个栈及其里面的链式栈帧,一个栈帧就对应一个方法.

为什么要有多线程?

  1 人的需求,可以多线程解决;2 多核CPU的出现,需要提高程序的执行效率

创建线程的方式:

  1 继承java.lang.Thread,重写run()方法(run方法就相当于新线程中的main方法,是程序执行的起点和终点)

  2 创建一个Thread实现java.lang.Runnable并实现接口的run()方法

启动线程只有一个方法:

  对象名.start(),启动后默认就调用了run()方法

  不写对象名.run(),这样是方法的调用,不是开启一个新的线程

线程类的常用方法:

  setName():给线程取名字,先取名字再启动,启动之后就不能再改名字了

    不设置名字的话就会默认是Thread-0,Thread-1......(new的时候就起名字了)

  getName():获得当前线程的名字

  static currentThread():获得当前线程的内存地址

  static sleep(time):让当前的线程睡眠指定的毫秒数

  setPriority():设置线程的优先级

    MIN_PRIORITY : 1

    MAX_PRIORITY : 10

    NORM_PRIORITY : 5

  interrupt():强制唤醒休眠的线程

  join():当前线程执行完毕再在本线程后面继续往下执行,即当前行以后所有线程的代码都必须等待当前线程执行完毕再执行,相当于线程合并,变成单线程,还是从上向下执行

  static yield():在当前时间片给同一个优先级的线程让路,不同优先级的不让路,下一个时间片不一定再让

守护线程(兜底线程)

  活,他先活;,他后死:这个就是守护线程的特征

  每个程序在运行时,默认的都会开启一个守护线程,用于监听我们正常的程序的运行,当我们正常的程序运行出错以后,就会跳到这个守护线程.守护线程会去做一些销毁资源,记录日志等操作,然后再退出jvm.所以说,我们平常程序一启动,默认就会有两个线程存在

  守护线程是jvm默认提供的,不用我们管.

  我们可以用setDaemon()把我们的线程设置成守护线程.该方法必须在启动线程之前调用,即在start之前调用这个方法

原文地址:https://www.cnblogs.com/lianggx66/p/4802663.html