java多线程基础

进程与线程概念

进程:指一个内存中运行的应用程序,每一个进程都有一个独立空间。
线程:一个进程可以开辟多个执行路径,共享一个内存空间,一个执行路径是一个线程,线程之间可以自由切换,并发(两个或者多个时间在同一时间段内发生,区别于并行同时发生))执行。一个进程最少有一个线程。

调度分类

分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性)java默认使用抢占式调度

线程分类

用户线程:当一个进程不包含任何的存活的用户线程是进程结束。
守护线程:守护用户线程的,当最后一个用户线程结束时,所有守护线程自动死亡。
守护线程的创建:任务对象.setDaemon(true);

线程的创建

线程创建有 三种方式(继承Thread、实现Runnable接口、实现Callable接口 )

一、Thread

将类声明为Thread的子类。 此子类应覆盖类Thread的run方法。 然后可以分配和启动子类的实例。

//线程的创建
 class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }
     
//线程启动
public class Test {
    public static void main(String[] args) {
        PrimeThread p = new PrimeThread(143);
        p.start();

    }
}

二、Runnable

声明一个实现Runnable接口的类。 该类然后实现run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,然后启动。

class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

//线程启动
public class Test {
    public static void main(String[] args) {
        PrimeRun p = new PrimeRun(143);
        new Thread(p).start();


    }
}

实现Runnable接口与继承Thread区别

1.通过创建任务,然后给线程分配的方式实现多线程,更适合多个线程同时执行相同的任务。
2.可以避免继承所 带来的局限性
3.任务与线程分离提高了程序的健壮性。
4.线程池大多数接收Runnable类型任务,不接受Thread类型任务。

三、Callable(使用较少,作为了解知识)

Callable接口会生成带返回值的线程,类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类而设计的。 但是, Runnable不会返回结果,也不能抛出已检查的异常。

线程的六种状态

1.New 创建未启动线程
2.Runnable 在java虚拟机中执行的线程状态
3.Blocked 被阻塞排队等待
4.Waiting 无限期等待直到被唤醒
5.Time_waiting 指定时间等待,到时间自动唤醒
6.Terminated 退出线程

线程常用方法

变量和类型方法描述
static voidsleep​(long millis)导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。
StringgetName()返回此线程的名称。
voidinterrupt()中断此线程。
voidsetDaemon​(boolean on)将此线程标记为 daemon线程或用户线程。
voidrun()如果此线程是使用单独的Runnable运行对象构造的,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。
voidstart()导致此线程开始执行; Java虚拟机调用此线程的run方法。
static ThreadcurrentThread()返回对当前正在执行的线程对象的引用。
intgetPriority()返回此线程的优先级。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值